【发布时间】:2020-05-10 00:35:40
【问题描述】:
我的用户控制器中有一个索引操作,其中我试图连续做两件事,并且在他们都有机会完成之前不执行所需的 res.json() 方法。
我有一个加入用户的友谊加入模型。一列是frienderId,一列是friendedId。在下面的索引函数中,期望的结果是我将得到一个 SINGLE 用户对象,它是一个朋友。下面有承诺的原因是因为用户可能在frienderId 列或friendedId 列中,所以我必须从本质上解析req.user 的朋友的两种可能情况。
问题是最后返回的东西,即 I.E. res.json(result),总是返回正确的朋友,但是,它总是在所需对象之前或之后返回一个空数组 []。我知道这个空数组来自两个未找到结果的承诺场景之一。是否有某种类型的方法而不是像sayyy..reject 这样的解决方法?其中如果调用,整个promise不会被推送到promise数组中?然后我可以测试 if (!friended) {reject} 或 if (!friender) {reject}
我了解 .each 是在枚举每个承诺并给出每个承诺的结果。但是,我不想要每个 Promise 的结果,我只想访问每个 Promise 运行的副作用。
谢谢!
index: function(req, res) {
var promiseArray = [];
promiseArray.push(new Promise(function(resolve) {
user.findById(req.user.id).then(function(user) {
user.getFrienders({
where: {
username: req.body.username
}
}).then(function(friender) {
resolve(friender[0])
})
})
}));
promiseArray.push(new Promise(function(resolve) {
user.findById(req.user.id).then(function(user) {
user.getFriendeds({
where: {
username: req.body.username
}
}).then(function(friended) {
resolve(friended[0])
})
})
}));
Sequelize.Promise.map(promiseArray, function(result) {
res.json(result);
});
}
【问题讨论】:
-
另一个奇怪的事情是,当我不是简单地在最底部的 res.json(result) 下,在最顶部的 var promiseArray 下添加一个未定义的变量,称为 var friend,然后是 console.log (friend) 在最后的 Sequelize.Promise.map 函数中,结果是两个值。第一个是未定义的,然后第二个是正确的朋友对象,反之亦然,具体取决于用户所在的列 (frienderId或friendedId)。对于在世界控制台中记录单个变量如何导致记录两个完全不同的值,一个接一个地,非常困惑。谢谢。
标签: sql node.js promise sequelize.js bluebird