簡體   English   中英

拒絕然后解決Q承諾

[英]Rejecting and then Resolving a Q Promise

我看過的代碼看起來像這樣:

var defer = Q.defer();
// do something, here's the callback
if (err) {
   defer.reject({err: err})
}
defer.resolve({success: data});
// close callback
return defer.promise;

如果一個諾言首先被拒絕,然后被解決,看來“拒絕”仍然存在。

當我第一次看到這種模式時,我傾向於建議將解決方案包裝在else ,但是由於它按原樣工作,這是可以接受的模式嗎?

拒絕然后兌現承諾是否會有問題?

看來,如果您解決然后拒絕,則解決方案仍然存在。 那么,無論首先發生什么,是什么“棍子”?

那么,無論首先發生什么,是什么“棍子”?

對,就是這樣。 承諾的狀態一旦完成(已履行或被拒絕)就不會改變。 因此,不,這里不會有問題,如果拒絕首先發生,則承諾被“鎖定”為被拒絕。

但是,請考慮一下是否真的沒有改善您的代碼質量。 更少的代碼行並不一定會提高代碼的可讀性! 我會這樣說,因為如果您看到if / else,則快速了解發生的事情要容易得多。 如果其他人不得不看您的代碼,並且他們最初也不知道承諾在解決之后是不變的,該怎么辦?

“您不知道JS(異步和性能)”的第3章是很好的資源,可以更全面地把握承諾。 Q符合的Promises A +規范也是如此。 后者更像是“客觀的真理來源”,但是很難讀懂(嗯,這是一種規范)。

暫無
暫無

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

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