$.ajax({ url: '/latestNewsIndex', type: 'get', dataType: 'json', timeout: 1000, success: function (data, status) { if (data.value.length == 0) { alert("暂时没有更多新闻!"); } else { f2(data.value); } }, fail: function (err, status) { alert('暂时没有更多新闻!'); } }) function f2(news) { var promise = new Promise(function(resolve,reject) { pullUpAction(news); resolve(1); }); promise.then( function(id) { loaded() }); }
透過ajax,然後呼叫f2(),可以實作先執行pullUpAction(news),結束後再執行loaded()。可是如果直接執行否f2(),像下面:
f2(news); function f2(news) { var promise = new Promise(function(resolve,reject) { pullUpAction(news); resolve(1); }); promise.then( function(id) { loaded() }); }
就無法達到Promise先後執行方法的效果,這是為什麼呢?
結果是
在沒有設定時的時候是先執行的test1函數再執行promise物件成功時的返回.有可能的猜測就是你在使用ajax請求時,f2函數完成的時間剛好與ajax請求結束的時間一樣或者小於,所以你看到了你想要的執行結果,但是直接呼叫不通過ajax時則反應出了真實的反應時間。建議在這裡pullUpAction調試看看
以上為本人愚見,僅做參考