每个 Promise 中的嵌套 Promise
Nested Promise in Promise each
有人可以解释为什么这不像我预期的那样有效吗?
我正在尝试 return 仅 Promise.each().then() 中使用的已创建或更新项目的 ID。这是必要的,因为创建 returns 对象并更新对象数组。
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));
});
result 是整个创建的对象,而不仅仅是 id。我想要 return 一个仅包含更新后 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
的行为更改为 return 结果,因此您的原始代码可能无效,但实际上可以在 3.0 中运行。
有人可以解释为什么这不像我预期的那样有效吗?
我正在尝试 return 仅 Promise.each().then() 中使用的已创建或更新项目的 ID。这是必要的,因为创建 returns 对象并更新对象数组。
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));
});
result 是整个创建的对象,而不仅仅是 id。我想要 return 一个仅包含更新后 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
的行为更改为 return 结果,因此您的原始代码可能无效,但实际上可以在 3.0 中运行。