Ich habe dieses Versprechen, das ein neues Item
-Dokument erstellt, wenn es nicht in der db gefunden wird, und speichert es dann in einem zuvor erstellten Collection
-Dokument ..
Das Sammlungsdokument ist die erste Zeichenfolge in einem Array, und jeder nachfolgende Index im Array wird in eine oder mehrere Artikeldokumente übersetzt.
Promise.each "Löst das ursprüngliche Array unmodifiziert" und so macht das letzte return
in Promise.each
die Objekte rendern, aber das nachfolgende .then
erzeugt das ursprüngliche Array ..
Hier ist das Versprechen (abgekürzt für Lesbarkeit):
%Vor% Und hier ist der letzte console.log
in Promise.each:
Und dann nach dem folgenden .then(function(allItems) {
ist hier der letzte console.log
:
Auch die Variable itemSeries
, die = Promise.each
später rendert undefined
in einer Promise.join?
Die Funktion .each
ändert nicht den Wert, der über die Kette übergeben wurde :
Ich habe Ihren Code vereinfacht, als Eingabe nehme ich an:
%Vor%Für Ihren Code:
%Vor% Das Ergebnis ist weiterhin ['one','two']
, da dies aufgelöste Werte des Arrays items
sind. Der zurückgegebene Wert in jedem einzelnen hat keinen Einfluss auf den Inhalt des Wertes, der an die verkettete then
übergeben wird.
Die Funktion .map
hat dagegen folgenden Effekt:
Hier wird der Wert return
verwendet, um ein neues Array zu erstellen, das dann an then
übergeben wird. Hier wäre das Ergebnis ['one.','two.']
.
Die zwei allItems
, die in Ihrem Code erscheinen, sind verschiedene Objekte.
BEARBEITEN Für die serielle Iteration mit Mapping würde ich eine Hilfsfunktion wie folgt schreiben:
%Vor%Tags und Links javascript node.js promise bluebird