2016-08-11 4 views
2

in dieser unter Codebeispiel iNodeJS erstellen einfache Warteschlange auf Async

Promise.all([sendMoneyToRequestedUser(_data), saveTransferMoneyTransaction(_data)]) 
    .then(function (results) { 
     log.info("OOOOOOOOOOOOOo"); 
    }).catch(function (error) { 
    log.info(error) 
}); 

Multi-Funktion auf der gleichen Zeit ausgeführt werden können, aber ich will für sie einfache Warteschlange schaffen, zum Beispiel, kann ich Implementierung dass mit Promise mit diese Lösung? Ich habe 3 Funktionen check, send und post, die ich in Serie ausführen möchte und das Ergebnis jedes Schrittes an den anderen weitergeben.

Schritt 1, check() Funktion, Schritt 2, send() Funktion und dann nach ihnen Finish ausführen Funktion zum Beispiel post()

für diese Implementierung ich brauche Ergebnis je Schritte zu erhalten, zum Beispiel von bekommen führen Schritt 1, wenn seine return true dann auf Schritt 2 ich brauche Ergebnis Schritt 1 zu verwenden,

ist async.parallel Lösung für diese Implementierung? oder Promise kann das tun

+0

Was sind "check", "send" und "post" Funktionen? –

+0

@YanFoto sie arbeiten mit Datenbank mit mySql –

Antwort

2

UPDATE: Die Frage nicht wirklich klar ist, was gegeben ist, und das, was gewünscht wird. Von den Kommentaren habe ich folgendes:

drei Funktionen von check, send und post sind gegeben und es ist wünschenswert, in Serie ausgeführt werden.

Lassen Sie uns sagen, dass die check erwähnt, send und post alle Rückgabe Promises, zB:

function check() { 
    return new Promise(function (resolve, reject) { 
    // Do some stuff and save them in a var 'results' 
    var results = ...; 
    resolve(results); 
    }); 
} 

Dann können Sie einfach eine Warteschlange bauen wie folgt:

check() 
    .then(send) 
    .then(post) 
    .catch(function(err) { console.error(err); }) 

Auf jeder Ebene die Funktion wird mit dem von der vorherigen Ebene aufgelösten Wert aufgerufen.

+0

in Ihrem Code, 'send' kann Ergebnis von' check' oder 'post' bekommen kann Ergebnis von' send' ist richtig? –

+0

Genau. Sie sollten jeweils ein Versprechen abgeben, und das Ergebnis, das sie weitergeben wollen, sollte übergeben werden, indem die "Entschlossenheit" -Funktion der Verheißung aufgerufen wird. –

+0

dann was '([sendMoneyToRequestedUser (_data), saveTransferMoneyTransaction (_data)]' Funktionen? Könnten Sie einfache Funktion als 'check' schreiben? Diese Funktionen haben' function() 'Argument? –

1

Ich denke, was Sie suchen, ist async.series. Is führt nacheinander ein Array von Funktionen in sequenzieller Reihenfolge aus und übergibt ein Array von Ergebnissen an die Callbacks der vorherigen Funktionen.

Beispiel

var async = require('async'); 

async.series([ 
    function(callback) { 
     //Do a bunch of relevant stuff 
     callback(null, 'First function'); 
    }, 
    function(callback) { 
     //Do some more relevant stuff 
     callback(null, 'Second function'); 
    } 
], 
function(err, results) { 
    console.log(results); //Logs ['First function', 'Second function'] 
}); 
+0

könnten Sie ein einfaches Beispiel für Ihren Beitrag für mich nehmen? –

+0

@ tux-world aktualisiert –

+0

vielen Dank sir –