Spec-Zone.ru › Bluebird

.spread

.spread(
    [function(any values...) fulfilledHandler]
) -> Promise

Как вызов .then, но значение выполнения должно быть массивом, который распаковывается в формальные параметры обработчика выполнения.

Promise.all([
    fs.readFileAsync("file1.txt"),
    fs.readFileAsync("file2.txt")
]).spread(function(file1text, file2text) {
    if (file1text === file2text) {
        console.log("files are equal");
    }
    else {
        console.log("files are not equal");
    }
});

При объединении .spread, возврат массива обещаний также работает:

Promise.delay(500).then(function() {
   return [fs.readFileAsync("file1.txt"),
           fs.readFileAsync("file2.txt")] ;
}).spread(function(file1text, file2text) {
    if (file1text === file2text) {
        console.log("files are equal");
    }
    else {
        console.log("files are not equal");
    }
});

Обратите внимание, что при использовании ES6, вышеприведенное можно заменить на .then() и деструктуризацию:

Promise.delay(500).then(function() {
   return [fs.readFileAsync("file1.txt"),
           fs.readFileAsync("file2.txt")] ;
}).all().then(function([file1text, file2text]) {
    if (file1text === file2text) {
        console.log("files are equal");
    }
    else {
        console.log("files are not equal");
    }
});

Обратите внимание, что .spread() неявно выполняет .all(), но синтаксис деструктуризации ES6 этого не делает, поэтому в приведенном выше коде требуется явный вызов .all().

Если вы хотите скоординировать несколько отдельных конкурирующих обещаний, используйте Promise.join

© 2013–2018 Petka Antonov
Licensed under the MIT License.
http://bluebirdjs.com/docs/api/spread.html

Spec-Zone.ru

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