在Promise中嵌套Promise
Nested Promise in Promise each
有人能解释一下为什么这不能像我预期的那样工作吗?
我试图只返回在Promise.ech().then()中使用的已创建或更新项的id。这是必要的,因为create返回一个对象并更新一个对象数组。
Promise.each(items, function(item){
if(...item doesn''t exist...)
return Item.create(item)
.then(function (created) {
return created.id;
///HOW DO I GET THIS ID ONLY?
});
else {
return Item.update(item)
.then(function (updated) {
return updated[0].id;
///AND THIS ID?
});
}
}).then(function(result) {
sails.log("THIS SHOULD BE AN ID" + JSON.stringify(result));
});
结果是整个创建的对象,而不仅仅是id。我想返回一个只包含更新后的id的数组。显然嵌套承诺是不好的,但我不知道如何简化它。
不要使用.each
使用.map
将项目列表映射到项目列表:
Promise.map(items, function(item){
if(...item doesn''t exist...)
return Item.create(item).get("id"); // get is a shortcut to .then(fn(x){ r x.id; })
else {
return Item.update(item).get(0).get(id);
}).then(function(result) {
sails.log("Here is the array of all IDs + JSON.stringify(result));
});
如果你想一个接一个地查看它们并等待它们,你可以链接第二个.map
。如果您想设置为按顺序执行(慢得多),.map
还需要一个并发参数。
正如Esailija所说,在3.0中,each
的行为会改变以返回结果,因此您的原始代码可能无效,但实际上在3.0中可以工作。
相关文章:
- 用嵌套函数和默认函数定义函数
- 嵌套的promise节点js
- 在forEach循环中创建promise,并在不嵌套的情况下使用它们
- 如何使用promise来反规范化嵌套json
- for循环中的嵌套promise未按预期运行
- 这个promise嵌套可以改为链接吗
- 在Promise中嵌套Promise
- 如何将嵌套_.each转换为同步方法?首选使用 Promise 或 Async.waterfall
- 使用promise更好地处理AJAX嵌套
- node.js promise:嵌套在then()链中的promise的then(;我解决不了
- 处理Bluebird中的多个嵌套异步操作(promise)
- 如何正确使用promise,使我的代码;不要这么嵌套
- 从嵌套的Promise.alls返回值
- 如何从控制器调用嵌套在promise中的函数
- 带有嵌套promise的$q.all也是用$q.al创建的
- nodejs - Help " promise "用嵌套承诺读取的文件
- 为promise嵌套while循环
- promise如何与嵌套函数调用一起工作
- 不知道如何将嵌套的promise与Q链接起来
- 如何返回嵌套的promise