使用bluebird多个异步请求代码怎么来组织
发布于 7 年前 作者 wyfnet 3463 次浏览 来自 问答

使用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
})
回到顶部