簡體   English   中英

為什么Q.js在解決后承諾異步?

[英]Why are Q.js promises asynchronous after they have been resolved?

如果我有以下內容:

var deferred = Q.defer();

deferred.resolve();

var a = deferred.promise.then(function() {
    console.log(1);    
});

console.log(2); 

...為什么我在控制台中看到2,然后是1?

我理解這個輸出是正確的,根據Promises規范,它說在下一個tick(例如setTimeout() )上調用該函數,即使它已經被解析,但我不明白為什么。

我想有一個調用的代碼then在一系列承諾同步的,假設所有的承諾都得到了解決。

我實際使用的情況是,我想使用角度的實現, $q ,我想所有的then回調在同一執行$digest周期,使我沒有得到不必要的后續$digest周期。

答案是一致性。

在實際代碼中,您沒有在創建時始終立即解決的承諾,它們將毫無意義。 所以你有承諾, 有時可能會立即解決。

在這種情況下,您不希望有不同的流程。 你想要總是相同的,可預測的流程。 所以,你要總是叫上旁邊剔下一個功能。

當你不需要時,不要使用承諾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM