亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

求問,關于javascript的回調函數同步問題?求大佬幫忙看看!

求問,關于javascript的回調函數同步問題?求大佬幫忙看看!

不負相思意 2021-10-13 21:11:05
我有如下代碼,執行結果是ALERT顯示0(回調的結果肯定不是0)。我想可能是因為回調函數的異步問題,但又不能將ALERT放在回調函數內(有其它原因的),如果的確零步執行原因的話,有什么辦法將異步改成同步?即等回調函數返回后在執行后面的JAVASCRIPT代友。請直接幫我改好,謝謝。<script type="text/javascript" LANGUAGE= "JavaScript">var map = new BMap.Map("container"); var myGeo = new BMap.Geocoder(); var address="金沙江路129號";var d1=0;myGeo.getPoint(address, function(point){ if (point) {map.centerAndZoom(point, 16); map.addOverlay(new BMap.Marker(point)); d1=point.lng;} }, "上海市"); alert(d1);</script>
查看完整描述

3 回答

?
楊__羊羊

TA貢獻1943條經驗 獲得超7個贊

首先javascript腳本是線性執行的
<javascript>
運算A
運算B
運算C
</javascript>
執行了"A"才會執行B,然后才會執行C
之所以出現你說的異步現象。是因為你調用BMap.Map類getPoint是個ajax
這個ajax是一個http請求。不受javascript程序執行的限制
因為。getPoint就跳出了這個javascript腳本。自己去執行了,而腳本繼續下一個語句alert(d1)
因此-----------
function(point){
if (point) {
map.centerAndZoom(point, 16);
map.addOverlay(new BMap.Marker(point));
d1=point.lng;
}
}
----------------------
這個ajax反回后才執行的方法。并沒有工作
所以d1沒有=point.lng
如果象得到ajax請求后的d1結果
請在
d1=point.lng;后面加入:
alert(d1);



查看完整回答
反對 回復 2021-10-17
?
慕桂英546537

TA貢獻1848條經驗 獲得超10個贊

ajax框架很多都提供了同步訪問的功能,但是不推薦使用,因為在等待數據返回時,ui線程被占用,是瀏覽器出現無法響應的情況。
可以使用setTimeOut來設置延時等待數據返回。
示例代碼如下。
var d1=-1;
var waitTimer=null;
//doajax
var doSuccess = fucntion(){
if(d1!=-1)
{
alert(d1);
}else{
waiTimer = setTimeOut(doSuccess,100);//設置100毫秒的延時
}
};

doSuccess ();
不保證代碼的正確性,只是告訴你大概的思路。



查看完整回答
反對 回復 2021-10-17
?
弒天下

TA貢獻1818條經驗 獲得超8個贊

var map = new BMap.Map("container");
var myGeo = new BMap.Geocoder();
var address="金沙江路129號";
var d1=0;
myGeo.getPoint(address, function(point){
if (point) {
map.centerAndZoom(point, 16);
map.addOverlay(new BMap.Marker(point));
d1=point.lng;
outer();
}
}, "上海市");

function outer(){
alert(d1);
}



查看完整回答
反對 回復 2021-10-17
  • 3 回答
  • 0 關注
  • 264 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號