我只使用了蓝鸟几天,还是我confused.Here是我工作的代码:此代码蓝鸟promisify猫鼬
router.route('/:name')
.get(function (req, res) {
var values = [];
Tag.findOneAsync({'name': req.params.name}, {urlId: 1, _id: 0}).then(function (data) {
data['urlId'].forEach(function (urlId) {
Urls.findByIdAsync(urlId).then(function (result) {
values.push(result);
}).catch(function (err) {
res.status(500).send(err);
});
});
}).catch(function (err) {
res.status(500).send(err);
});
res.send(values);
});
,回复为空values
。所以我试图用这种方式组织代码:
router.route('/:name')
.get(function (req, res) {
var prom = new Promise(function(resolve, reject) {
var values = [];
Tag.findOneAsync({'name': req.params.name}, {urlId: 1, _id: 0}).then(function (data) {
data['urlId'].forEach(function (urlId) {
Urls.findByIdAsync(urlId).then(function (result) {
values.push(result);
}).catch(function (err) {
reject(err);
});
});
}).catch(function (err) {
reject(err);
});
resolve(values);
});
prom.then(function (values) {
res.send(values);
});
结果仍然是一样的。那么如何组织代码,以便在完成data['urlId'].forEach
操作后得到响应。
可以尝试将在第二个示例的第一个函数的最后回报,这样的承诺是解决它后返回?你可能不会返回它。 – blamb
如果您承诺使用模块,则异步方法已经返回承诺对象,因此您不需要手动创建承诺。另外,当在一个语句中使用promise时,你需要返回它 – vbranden