Ich habe das folgende Codebeispiel in einem Skript implementiert, das eine Reihe von Ergebnissen durchläuft und für jede eine HTTP-Anforderung erstellt.Wie kann ich eine Versprechensfolge beenden, wenn das Array verarbeitet wurde?
Das Skript wird nicht beendet, nachdem alle Elemente im Array verarbeitet wurden. Wie würde ich es anpassen, damit dies geschieht?
Meine Implementierung macht einen API-Aufruf und gibt ein Versprechen:
....
}).then(function(results){
sequence(results, function(result){
checkSpam(result).then(function(akismet){
if(akismet) {
//console.log('spam returned from checkspam');
write_spam_to_file(result);
} else {
//console.log('no spam returned from checkspam');
}
})
});
}).catch(function (e) {
console.log('Error occurred:');
console.log(e);
});
function sequence(array, callback) {
return array.reduce(function chain(promise, item) {
return promise.then(function() {
return callback(item);
});
}, Promise.resolve());
}
function checkSpam(entry) {
var akismetPromise = new Promise(function resolver(resolve, reject) {
akismet.checkSpam({
user_agent: 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1',
referrer: 'http://google.com',
user_ip: entry.ip,
comment_author: entry.poster,
comment_content: entry.message,
comment_type: 'forum-post'
}, function (err, spam) {
if (err) reject(err);
resolve(spam);
});
});
return akismetPromise;
}
Was genau meinen Sie mit "nicht verlassen"? Sie meinen, Knoten hört nicht auf zu laufen? Das liegt kaum an den Versprechen, eher an "Akismet" oder was auch immer du benutzt. – Bergi
@Bergi Ich bin neu zu versprechen, also war ich mir nicht sicher, ob ich etwas falsch gemacht hatte. Ich habe etwas mehr Code für den Fall hinzugefügt, dass es kein Licht mehr gibt. Danke für einen Blick. – codecowboy
Beim Durchlaufen von Arrays können Sie innerhalb der Schleifenmethode false zurückgeben, um die Iteration zu stoppen. – Silkster