.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