CNode

使用bluebird多个异步请求代码怎么来组织

问答
Wwyfnet发布于9 年前最后回复9 年前7 回复4153 浏览0 收藏

使用bluebird多个异步请求代码怎么来组织,大家一起讨论下呗

查看回复

回复 (7)

I
im-here#1·9 年前

下一个请求依赖上一个请求结果的话只能一个一个.then了 如果各个请求互相独立没有依赖,想都不用想,直接.all走起

I
im-here#3·9 年前
引用 wyfnet@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 得到的结果是一个数组
 })

这个编辑器里写代码太麻烦了,不知道写的有没有错

I
im-here#6·9 年前
引用 wyfnet@imhered bulebird 多个请求其中某个请求出现超时或者错误怎么办呢?

@wyfnet.catch可以捕捉错误,如果是.all的话,只要有一个错误,会中断所有执行。 如果你是用.then.then 这样一个一个串联执行的话,在错误出现前的执行都是有效的

去看看bluebird的文档吧,都有写~

I
IchiNiNiIchi#7·9 年前
引用 wyfnet@imhered bulebird 多个请求其中某个请求出现超时或者错误怎么办呢?

@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
})
参与回复
登录后即可参与回复。登录