在 for 循环中链接猫鼬承诺
Posted
技术标签:
【中文标题】在 for 循环中链接猫鼬承诺【英文标题】:Chaining mongoose promises in a for loop 【发布时间】:2016-11-01 21:10:54 【问题描述】:我有一个 api 使用这个函数在 mongodb 中创建一个新文档:
export function create(req, res)
return Track.create(req.body)
.then(respondWithResult(res, 201))
.catch(handleError(res));
这只是添加了一个新文档,我想扩展它,在添加文档后,我想将更多文档添加到另一个集合中,其中包含来自响应的信息,如下所示:
export function create2(info)
var trackId = info._id;
var users = info.users;
var basic =
trackId : trackId
;
for (let user of users)
basic.username = user.username;
Location.create(basic);
我想在第一个 create 函数的 promise 的 .then 上调用 create2 函数,如下所示:
export function create(req, res)
return Track.create(req.body)
.then(create2)
.then(respondWithResult(res, 201))
.catch(handleError(res));
问题是create2没有返回一个promise,我真的不知道如何在create2中链接Location.create返回的promise?
【问题讨论】:
【参考方案1】:让create2
返回一个promise 的方法是使用Promise.all(),它在传递给它的promise 数组全部实现时实现。像这样的...
var _ = require('underscore'); // optional but useful for a better loop with '.map'
export function create2(info)
var trackId = info._id;
var users = info.users;
var basic =
trackId : trackId
;
var promises = _.map(users, function(user)
basic.username = user.username;
return Location.create(basic);
);
return Promise.all(promises);
【讨论】:
我将所有的 Promise 推入一个数组并使用这个包:npmjs.com/package/q 将它们与 Q.all(arrayOfPromises) 合并 我假设原生支持,但 q 很好。我想你可以告诉 Mongoose 你也在使用它,就像mongoose.Promise = require('q').Promise;
以上是关于在 for 循环中链接猫鼬承诺的主要内容,如果未能解决你的问题,请参考以下文章