javascript - 關於Promise,為何我這樣寫不能得到正確的執行順序?
学习ing
学习ing 2017-07-05 11:02:27
0
1
744
$.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先後執行方法的效果,這是為什麼呢?

学习ing
学习ing

全部回覆 (1)
阿神
test('test') function test (value) { let promise = new Promise(function (resolve, reject) { test1(value) resolve(1) }) promise.then(function (id) { console.log('我后执行,我的值为:' + id) }) } function test1 (value) { console.log(value) window.setTimeout(function (value) { console.log('我先执行,我的值为:' + value) }, 10 * 1000) }

結果是

在沒有設定時的時候是先執行的test1函數再執行promise物件成功時的返回.有可能的猜測就是你在使用ajax請求時,f2函數完成的時間剛好與ajax請求結束的時間一樣或者小於,所以你看到了你想要的執行結果,但是直接呼叫不通過ajax時則反應出了真實的反應時間。建議在這裡pullUpAction調試看看
以上為本人愚見,僅做參考

    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板
    關於我們 免責聲明 Sitemap
    PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!