Ich versuche, Promise Verkettung funktioniert für mich richtig.Erstellen von Funktionen, um Versprechen richtig zu verketten
Ich glaube, das Problem nach unten läuft darauf hinaus zwischen dem Unterschied zu verstehen:
promise.then(foo).then(bar);
und:
promise.then(foo.then(bar));
In dieser Situation Ich schreibe sowohl foo
und bar
und die Unterschriften zu bekommen versuchen Recht . bar
nimmt einen Rückgabewert, der von foo
erzeugt wird.
Ich habe das letzte Arbeiten, aber meine Frage ist, was ich tun muss, um das ehemalige Arbeiten zu erhalten?
In Bezug auf die oben genannten ist der vollständige Code (unten). Ich habe nicht die verschiedene Protokolle in der Reihenfolge gedruckt, ich erwarte (erwarteten log1
, log2
, log3
, log4
, log5
, aber immer log3
, log4
, log5
, log1
, log2
). Ich hoffe, dass ich, wenn ich das oben erfahre, das auch richtig machen werde.
var Promise = require('bluebird');
function listPages(queryUrl) {
var promise = Promise.resolve();
promise = promise
.then(parseFeed(queryUrl)
.then(function (items) {
items.forEach(function (item) {
promise = promise.then(processItem(transform(item)))
.then(function() { console.log('log1');})
.then(function() { console.log('log2');});
});
}).then(function() {console.log('log3')})
).then(function() {console.log('log4')})
.catch(function (error) {
console.log('error: ', error, error.stack);
});
return promise.then(function() {console.log('log5');});
};
Der zweite ist einfach falsch. 'then' nimmt einen Rückruf als Argument, kein Versprechen. – Bergi
@Bergi - Wenn ich dem 'then' ein anderes Versprechen geben will, muss ich nur sicherstellen, dass der Callback das Versprechen zurückgibt? – Vineet
@Vineet yup, Sie müssen eine Funktion übergeben, die ein Versprechen zurückgibt, nicht das Versprechen selbst. – nem035