Próbuję zrozumieć, dlaczego następujący kod zachowuje się odmiennie z Q.defer()() i obiecująRóżnica między Q.defer()() Obietnicy
Case 1: Kiedy” m (za pomocą Q.defer)
getDocument(id)
.then(function (response) {
console.log('in first then')
return 'from two';
}).then(function (response) {
console.log(response)
});
var getDocument=function(){
var b = Q.defer();
b.resolve('from getDocument'); // here will do some async operation..this is just an example
return b.promise;
}
wyjściowa:
in first then
undefined
Przypadek 2: za pomocą obietnicy()
getDocument(id)
.then(function (response) {
console.log('in first then')
return 'from two';
}).then(function (response) {
console.log(response)
});
var getDocument=function(){
return Promise.resolve('from getDocument');
}
wyjściowa:
in first then
from two
Pytanie
- Dlaczego jest różnica w wydajności?
- Wiem, że Q.defer to anty-wzór, ale jak wybrać, kiedy użyć czego?
można udostępnić plunkr/skrzypce ..? Wątpię, aby 1. wyjście nie zawierało 'undefined' w 2nd' console.log' –
Która wersja Q ... ponieważ 'v1' działa dobrze –
_" Wiem, że Q.defer to anty-wzorzec, ale jak wybrać, kiedy użyć czego? "_ Użyj konstruktora obietnicy, aby owinąć obietnicę w asynchroniczne operacje bez obietnicy. Użyj '.defer' w sytuacjach, w których użycie konstruktora Promise byłoby bardzo skomplikowane lub kłopotliwe, a' .defer' byłby bardziej elegancki (powinno to być prawie nigdy). – JLRishe