【发布时间】:2020-01-06 20:12:21
【问题描述】:
我正在尝试在 mocha 测试中链接承诺,但似乎数据没有从一个 .then 传递到下一个。
我正在尝试测试一个可以更新数据库中一行的函数。然后我想查询该行以查看是否已应用更改。
我的测试:
it("should update the status of an appointment", function(done) {
new Promise((resolve, reject) => {
updateStatus(testDb, 3, "In Progress", function(err) {
if (err) reject(err);
resolve();
});
})
.then(() => {
new Promise((resolve, reject) => {
getOneAppointment(testDb, 3, function(err, appt) {
if (err) reject(err);
resolve(appt);
});
});
})
.then(appt => {
console.log(appt);
expect(appt).deep.equal(updatedResponse);
done();
})
.catch(err => {
done(err);
});
});
第二个.then 中的console.log 打印为未定义。
【问题讨论】:
-
回报你的新承诺
-
知道没有任何
return语句的函数有一个隐含return undefined很有用...知道箭头函数的简短版本也很有用例如...arg => blah()等同于arg => { return blah();}...所以至少上面的一个地方可以删除一些{}而不是添加return -
@Trevor 可以,但你能解释一下为什么我不需要返回第一个承诺吗?
-
理论上你应该把它归还给某物。使用 new 关键字而不将值存储到某些东西并不是很好。但是您的第一个承诺不会解析为一个值,因此返回它会给出未定义的结果,就像不返回它一样。作为一种习惯,对于任何没有真正返回值的承诺,我通常返回 true 表示成功,而返回 false 表示失败。
标签: javascript node.js asynchronous promise mocha.js