新手求教多个 promise 异步的问题

2017-05-05 19:26:26 +08:00
 cgcheng

遇到的问题是这样:

有一个对象数组存储了参数和结果,

通过 for 循环构造多个 promise,每个 promise 里面会用到数组中的一个对象,并在得到结果之后回写结果

现在遇到的问题是似乎回写的时候变量已经变化了,想知道这种情况下,如何把数组里面的对象传到 then 里去并在 then 中修改?

初次用异步,踩了很多坑,求指教这种情况下的最佳实践?是作为参数往下传么?

1368 次点击
所在节点    问与答
4 条回复
noe132
2017-05-05 20:03:19 +08:00
var objarr = [{}, {}, {}]

promise.all(objarr.map(v => {
return new Promise((resolve, reject) => {
// TODO jobs
if (err) reject(err)
resolve({
message: 'your message',
originalObject: v
});
}).then(data => {
console.log(data.originalObject);
}).catch(err => {
console.log(err.message);
});
}));

简单的例子。在 resolve 的时候返回一个对象就行,添加一个属性保持对原对象的引用,在 then 里就能取到了。
noe132
2017-05-05 20:04:01 +08:00
cgcheng
2017-05-05 22:20:22 +08:00
收到~,感谢感谢,搜到一个更简单的,forEash

http://www.cnblogs.com/gaojun/p/4157684.html
ETiV
2017-05-05 22:41:21 +08:00
引入 bluebird as Promise

Promise.map( items, item=>{} )
.then()

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/359427

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX