Spec-Zone.ru › Bluebird

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API