關於如何使用Jquery.deferred來使一個慢同步函數返回一個承諾,而不是一個簡短的問題。 什麼我迄今所做的是:語法爲Jquery.deferred,使同步函數返回承諾
function sayIt(ms) {
setTimeout(function() { console.log('what I say'); }, ms);
}
function doIt() {
return $.Deferred(function() { sayIt(2000); }).promise();
}
doIt().then(function() { console.log('ah'); });
的sayIt(2000)總是經歷,但之後「然後」鏈接的功能永遠不會觸發。
如果我這樣做:
doIt().then(console.log('ah'));
的「啊」來了馬上,然後「我說的」 2000毫秒後 - 我想知道的當然是相反的 - 即在兩秒鐘後我然後馬上得到'我說的'然後'啊'。
任何建議表示讚賞!
'doIt方法(),然後(執行console.log( '啊'));'日誌立刻因爲這個執行' console.log',然後將其返回給'then'。 – Armatus
@Armatus好的謝謝,這是有道理的,我知道第二個doIt()鏈的語法無論如何都是錯誤的。但是第一個doIt()鏈呢?爲什麼doIt()不返回sayIt(2000)返回時解決的承諾?提前致謝! – Petrov
這不是同步的 - 使用'setTimeout'使它異步。 – Alnitak