Promise.join
Promise.join(
Promise<any>|any values...,
function handler
) -> Promise
Для координации нескольких одновременных независимых обещаний. В то время как .all подходит для обработки динамически изменяемого списка однородных обещаний, Promise.join намного проще (и производительнее) использовать, когда у вас есть фиксированное количество отдельных обещаний, которые вы хотите координировать одновременно. Конечный параметр, функция обработчика, будет вызван со значениями результатов всех выполненных обещаний. Например:
var Promise = require("bluebird");
var join = Promise.join;
join(getPictures(), getComments(), getTweets(),
function(pictures, comments, tweets) {
console.log("in total: " + pictures.length + comments.length + tweets.length);
});
var Promise = require("bluebird");
var fs = Promise.promisifyAll(require("fs"));
var pg = require("pg");
Promise.promisifyAll(pg, {
filter: function(methodName) {
return methodName === "connect"
},
multiArgs: true
});
// Promisify rest of pg normally
Promise.promisifyAll(pg);
var join = Promise.join;
var connectionString = "postgres://username:password@localhost/database";
var fContents = fs.readFileAsync("file.txt", "utf8");
var fStat = fs.statAsync("file.txt");
var fSqlClient = pg.connectAsync(connectionString).spread(function(client, done) {
client.close = done;
return client;
});
join(fContents, fStat, fSqlClient, function(contents, stat, sqlClient) {
var query = " \
INSERT INTO files (byteSize, contents) \
VALUES ($1, $2) \
";
return sqlClient.queryAsync(query, [stat.size, contents]).thenReturn(query);
})
.then(function(query) {
console.log("Successfully ran the Query: " + query);
})
.finally(function() {
// This is why you want to use Promise.using for resource management
if (fSqlClient.isFulfilled()) {
fSqlClient.value().close();
}
});
Примечание: в версиях 1.x и 0.x Promise.join использовался как Promise.all , принимавший значения в качестве аргументов вместо массива. Это поведение устарело, но все еще частично поддерживается — когда последний аргумент является немедленной функцией, новые семантика будут применены
© 2013–2018 Petka Antonov
Licensed under the MIT License.
http://bluebirdjs.com/docs/api/promise.join.html