2016-12-21 2 views

Antwort

1

Wenn Wenn Sie ein Versprechen haben, das mit einem Array erfüllt wird und das Array eine bekannte Länge hat, können Sie .spread() verwenden, um das Array in einzelne Funktionsargumente umzuwandeln. Es ist ein Ersatz für , die die Argumente von einem Array in einzelne Argumente konvertiert, bevor Sie Ihren Handler aufrufen.

Anstatt also diese:

someFunction().then(function(arrayOfArgs) { 
    let arg1 = arrayOfArgs[0]; 
    let arg2 = arrayOfArgs[1]; 
}); 

Sie können dies tun:

someFunction().spread(function(arg1, arg2) { 
    // can directly access arg1 and arg2 here 
}); 

Also, in Ihrem speziellen Codebeispiel bietet Promise.join() bereits einen Rückruf, der die einzelnen abscheidet Ergebnisse, so sollte es überhaupt nicht benötigt werden. So konnte man dies nur tun:

return Promise.join(
     findStagingAdvanced(stagingQuery), 
     findDboAdvanced(dboQuery), 
     (stagingIssues, dboIssues) => _.concat(dboIssues, stagingIssues) 
    ).then(allIssues => { 
     // allIssues contains combined results of both functions above 
    }); 

Was dieser Code tut, um die Ergebnisse von findStagingAdvanced() und findDboAdvanced() zu sammeln und diese Ergebnisse in einem einzigen Array von Ergebnissen zu verschmelzen.


Es in Standard ES6 geschrieben werden konnte (zum Beispiel ohne Bluebird zusätzliche Funktionen) wie folgt aus:

return Promise.all([findStagingAdvanced(stagingQuery), findDboAdvanced(dboQuery)]) 
    .then(results => results[0].concat(results[1])) 
    .then(allIssues => { 
     // allIssues contains combined results of both functions above 
    }); 
+0

Danke für die klare Erklärung –

0

ermöglicht es Ihnen, das Ergebnis der findStagingAdvanced und findDboAdvanced und verschmelzen sie miteinander ohne Zwischenvariable

ohne Ausbreitung bekommen würden Sie eine zusätzliche Variable, die mutiert werden:

var staging; 
findStagingAdvanced(stagingQuery) 
.then(stagingQuery => { 
    staging = stagingQuery; // not that good practice 
    return findDboAdvanced(dboQuery); 
}) 
.then(dboQuery => { 
    var merged = [staging, dboQuery]; 
    return ... // another promise that use staging and dboQuery together 
}) 
Verwandte Themen