如何检查异步函数返回的内容



我知道if语句[duplicate]中JavaScript等待异步函数以及如何从异步调用返回响应的问题?,但是(也许是因为我是一个绝对的JS初学者(我无法实现这些想法。

使用async await文档,我可以使这个示例起作用:

let hello = async () => { return "Hello" };
hello().then((value) => console.log(value))

它只是输出Hello。但是,我希望我的代码稍后检查函数hello返回的内容。类似这样的东西:

if ( /* what comes here? */) {
console.log("Hello was said")
}

我怎么能这么做?如何制定这个if语句来检查CCD_ 3是否真的返回了";你好"?

hello().then((value) => ...)基本上意味着,如果promise(await(实现了,它应该调用function(value = <return_value>){}。。。所以…

hello().then((value) => {
if(value == 'Hello'){
console.log("Hello was said");
}
});
  1. async/Promise引入了一个独立的执行,否则会阻塞
  2. "稍后";发生在其阻塞线程完成时
  3. 您附加到.then((的回调将在"处执行;稍后的";时间

下面是一个可以消除一些雾的例子。

  • 注意调用setFree((之后的两个独立线程
  • gone((继续做自己的事情
  • setFree((立即返回
  • 两个执行之间共享一个公共变量waitOver
  • then((处理程序"知道";并在";稍后的";时间
  • 该处理程序更新公共变量waitOver,以通知那些有兴趣知道在";稍后的";时间

";

let waitOver = false;
let whatToDo = setFree("Jill",5);
console.log(whatToDo);
let theWait = setInterval( () => {

waitOver ? clearInterval(theWait) :
console.log(" and .. wait");
}, 1000);

function gone(secs) {
return new Promise(resolve => setTimeout(resolve, secs*1000));
}
function setFree(someone,secs) {

console.log(`If you truly love ${someone}, set ${someone} free`);
gone(secs).then(() => {
console.log(`Back! ${someone} is yours`);
waitOver = true;
return  `${someone} is yours`;
}).catch(`Hunting ${someone} down and kill ${someone}`);   
return " Here you wait ... ";
}

这就是你将得到的:

If you truly love Jill, set Jill free
Here I wait ... 
and .. wait
and .. wait
and .. wait
and .. wait
Back! Jill is yours*

注意调用setFree((后,主执行线程中对waitOver的任何检查都将为false,除非该检查是在gone((由其.then((处理程序处理后进行的。

如果没有.then((处理程序,那么gone((会去树林里,你将永远不知道Jill是否回来了,即使她回来了,因为完成过程从未处理过:-(

这取决于你对"稍后";。

  1. 您可以将其保存为常规变量并导出(这不是异步等待的问题(导出变量
  2. 如果你想以一种安全的方式来做;稍后的";是在您需要将其发送到数据库之后的某一天

if语句可以封装在异步函数中,如下所示:

let hello = async () => { return "Hello" };
async function foobar() {
if(await hello() == 'Hello')
console.log('yay')
}
foobar()

await只能在异步函数中使用。

Promise继续将Promise作为返回提供给您,但await可以在异步函数中评估Promise。

最新更新