【发布时间】:2018-08-27 08:06:10
【问题描述】:
我有一个奇怪的问题.. 首先,看看我的代码:
这是我使用等待的地方..
case "detail": {
const lineMessages = [];
let item = await this.getItem(postback.id);
let lineMessage = {
type: "text",
text: item.longDesc
};
lineMessages.push(lineMessage);
return new Promise(function(resolve, reject) {
if(lineMessages != []) {
resolve(lineMessages);
}
else {
let error = new Error("Cannot catch item ${postback.id}");
reject(error);
}
});
这是 getItem(id) 方法..
getItem(id) {
return Item.find({_id: id}).exec();
}
但事实证明我的 lineMessage 上的文本键是未定义的..
然后,lineMessage 是LineMessages: [{"type":"text"}](我曾经在控制台上记录过)
为什么在我的情况下等待不会停止执行?
似乎它试图在解决 item 之前查找 item.longDesc(只是我的猜测)。
请帮忙
【问题讨论】:
-
您确定
Item.find().exec()方法返回Promise吗?乍一看文档,它需要一个回调。 -
@Sirko
await实际上会通过返回它来处理非承诺值。 -
@UncleDave 我认为他的意思是它可能是一个回调函数而不是一个承诺函数,但我不确定这里的情况。可能是
getItem实际上没有找到该项目,或者其他一些 API 滥用 -
啊,真的。如果
exec期待回调,那么await不会为您做任何事情。 -
无关:@Terry Smith:
lineMessages != []可以更优雅地表达为lineMessages.length。
标签: javascript node.js mongoose async-await ecmascript-2017