使用bluebird多个异步请求代码怎么来组织
使用bluebird多个异步请求代码怎么来组织,大家一起讨论下呗
7 回复
下一个请求依赖上一个请求结果的话只能一个一个.then
了
如果各个请求互相独立没有依赖,想都不用想,直接.all
走起
@imhered 有详细的代码么,就是不知道怎么来写
@wyfnet 假如你有如下3个函数,返回的都是Promise:
f1(), f2(), f3()
后一个请求依赖前一个请求结果的写法:
f1()
.then(function (val) {
return f2(val);
})
.then(function (val) {
return f3(val);
})
.then(function (val) {
// dosomething
});
如果各个请求互相独立没有依赖那就更好办了
Promise.all([
f1(),
f2(),
f3()
]).spread(function (f1,f2,f3) {
// 这里的f1,f2,f3就是上面3个函数的结果
// 也可以.then 得到的结果是一个数组
})
这个编辑器里写代码太麻烦了,不知道写的有没有错
@imhered 谢谢,大概有点头绪了,后面再请教,膜拜
@imhered bulebird 多个请求其中某个请求出现超时或者错误怎么办呢?
@wyfnet 用.catch
可以捕捉错误,如果是.all
的话,只要有一个错误,会中断所有执行。
如果你是用.then.then
这样一个一个串联执行的话,在错误出现前的执行都是有效的
去看看bluebird的文档吧,都有写~
@wyfnet 我想到的是在单个请求对应的 promise 里 catch,然后在 all 里分别处理。类似
Promise.all([
f1().catch(err => return promise.resolve(err))
f2().catch(err => return promise.resolve(err))
f3().catch(err => return promise.resolve(err))
]).spread((f1, f2, f3) => {
// todo
})