如何返回一个不以 undefined 结尾的带有 async/await 的承诺?



我正在做一个异步/等待添加函数,使用一个给定的promise创建函数,该函数在被调用之前应该需要100ms。

const delayedPromise = ms => new Promise(resolve => setTimeout(resolve, ms));

我不明白的第一件事是,为什么上面的Promise中没有拒绝,以及如果我的add函数中出现错误,我该如何处理拒绝部分。

到目前为止,我的代码是

const delayedPromise = ms => new Promise(resolve => setTimeout(resolve, ms));
function validation(num1, num2) {
if (!Number.isFinite(num1) || !Number.isFinite(num2)) {
throw new Error('Only numbers are allowed');
}

function add(num1, num2) {
validation(num1, num2);
return num1 + num2;
}
// This is where I need some directions 
const addAwait = async (num1, num2) => {
const result = await delayedPromise(add(num1, num2), 100);
return result;
};
// My test is the following
describe.only('await calculator', () => {
it('add works fine', async () => {
const result = await calculator.addAwait(1, 2);
assert.equal(3, result);
});

我没有通过考试,我不明白为什么,它给了我AssertionError [ERR_ASSERTION]: 3 == undefined。我将这两个数字传递给异步函数,然后使用delayedPromise创建promise并将Timeout设置为100ms。然后,它应该返回一个带有结果(或错误(的promise,并使我的测试通过,但它没有通过。有人能告诉我我做错了什么吗?谢谢

首先,delayedPromise有点误导。这只是一个delaypausewait。它不应该返回任何东西,只应该返回一个最终解决的承诺。

const pause = ms => new Promise(resolve => setTimeout(resolve, ms));
// ...
const addAwait = async (num1, num2) => {
await pause(100);  // wait for 100ms
// then do the calculation and return the result.
return add(num1, num2);
};

最新更新