Javascript异步/等待问题:无法询问程序为什么不返回任何错误
请参阅函数Javascript异步/等待问题:无法询问程序为什么不返回任何错误,javascript,async-await,assert,assertion,Javascript,Async Await,Assert,Assertion,请参阅函数 async function dq(isOk){ if(isOk) {return "OK";} else {throw new Error("not OK");} } 什么断言能够准确地测试上述代码: assert(等待dq(true),'OK') 断言(wait(dq(true),'notok') assert(等待dq(true),'notok') assert(dq(true),'OK') 对于所有4个选项,我在开发控制台中都没有定
async function dq(isOk){
if(isOk) {return "OK";}
else {throw new Error("not OK");}
}
什么断言能够准确地测试上述代码:
对于所有4个选项,我在开发控制台中都没有定义,即使是选项2,其中await()从来都不是函数。如果承诺正常解析,那么await promise将返回结果。但是在拒绝的情况下,它抛出错误,就像在那一行有一个throw语句一样
async function f() {
await Promise.reject(new Error("Whoops!"));
}
在实际情况下,承诺可能需要一段时间才能被拒绝。在这种情况下,等待抛出错误之前会有一个延迟。
我们可以使用try..catch捕获该错误,方法与常规抛出相同:
async function f() {
try {
let response = await fetch('http://no-such-url');
} catch(err) {
alert(err); // TypeError: failed to fetch
}
}
f();
如果我们忘记在那里添加.catch,那么我们会得到一个未处理的承诺错误(可在控制台中查看)。我们可以使用全局unhandledrejection事件处理程序捕获此类错误
参考。尝试在异步函数中使用它
(async()=>{console.assert((wait dq(true));})(
你好,谢谢你的消息,我理解你的观点,但是上面的异步方法dq没有与之相关的承诺,所以在这种情况下,我正在检查行为。我可以保证第四个选项是不正确的,因为它将在异步函数dq之前触发