Bluebird:运行promise返回函数序列
Bluebird: Run sequence of promise-returning functions
运行动态生成的函数序列的最简洁方法是什么,其中每个函数都返回一个Promise,必须在下一个函数运行之前解析该Promise?
例如:
// Assume the following 'process' functions are generated elsewhere
function process_1 (input) {
return new Promise(function (resolve, reject) {
resolve(input + '_1');
});
}
function process_2 (input) {
return new Promise(function (resolve, reject) {
resolve(input + '_2');
});
}
function process_3 (input) {
return new Promise(function (resolve, reject) {
resolve(input + '_3');
});
}
// We can construct a sequence of these functions,
// but each one still needs to be 'configured' with a value
// before it can return it's promise.
var process = [process_1, process_2, process_3]
Bluebirds Promise
上可用的收集方法(例如all
、each
等)似乎处理值的集合,而不是promise生成函数的集合。
如果我试图将序列映射或缩减为承诺序列,而不是函数序列,那么我就失去了将一个承诺的结果传递到下一个承诺中的能力?
您可以为此使用reduce:
bluebird.reduce( [process_1, process_2, process_3], function ( input, next ) {
return next( input );
}, 'INPUT' ).then( function ( result ) {
console.log( result );
} );
注意:您还缺少process_2
和process_3
的输入参数,必须添加该参数才能正常工作。
function process_1 (input) {
return new Promise(function (resolve, reject) {
resolve(input + '_1');
});
}
function process_2 ( input ) {
return new Promise(function (resolve, reject) {
resolve(input + '_2');
});
}
function process_3 ( input ) {
return new Promise(function (resolve, reject) {
resolve(input + '_3');
});
}
bluebird.reduce( [process_1, process_2, process_3], function ( input, next ) {
return next( input );
}, 'INPUT' ).then( function ( result ) {
console.log( result );
} );
// INPUT_1_2_3
这里有一种非蓝鸟特定的替代方法:
var p = arrayOfFns.reduce((p, c) => p.then(c), Promise.resolve('INPUT'));
p.then(console.log);
相关文章:
- ES6构造函数返回基类的实例
- 从函数返回角度承诺
- 如何从jquery函数返回变量
- 根据是否解析了 Promise 从函数返回值
- Javascript函数返回未定义
- 如果函数返回True,则显示Javascript按钮
- Google Sheet自定义函数返回0
- 从Ajax函数返回值
- 使用for循环从Javascript中的函数返回多个值
- 谷歌地图:函数返回未定义的值在console.log中运行良好
- 从函数中的函数返回数组时出错
- 如何从嵌套的API函数返回值
- 从Mongoose结果匿名函数返回父函数
- 函数返回错误'令牌{'
- Jquery函数返回订单问题
- Mocha/Chai测试链接到函数返回断言错误
- 从异步函数返回值
- 函数返回后更新变量
- 我如何才能继续'如果'语句来比较作为参数的多个函数返回值
- 将外部函数返回的id传递给内部函数