Javascript 如何使JS异步函数与其他函数同步运行?
下面是JS代码:Javascript 如何使JS异步函数与其他函数同步运行?,javascript,async-await,Javascript,Async Await,下面是JS代码: function promise_GetSomething() { return new Promise(resolve => { setTimeout(function () { resolve("Something gotten after 3 sec."); }, 3000); }); } async function logAboutSomethingGotten() { conso
function promise_GetSomething() {
return new Promise(resolve => {
setTimeout(function () {
resolve("Something gotten after 3 sec.");
}, 3000);
});
}
async function logAboutSomethingGotten() {
console.log("Before getting 3-sec-something.");
var somethingGotten = await promise_GetSomething();
console.log(somethingGotten);
console.log("After getting 3-sec-something.");
}
function doSomething() {
console.log("START");
logAboutSomethingGotten();
console.log("STOP");
}
doSomething();
…打印以下内容:
START
Before getting 3-sec-something.
STOP
Something gotten after 3 sec.
After getting 3-sec-something.
如何调整它以打印以下内容
START
Before getting 3-sec-something.
Something gotten after 3 sec.
After getting 3-sec-something.
STOP
另外,如果asynclogAboutSomethingGotten()
返回一个值,如何同步获取和使用该值
编辑(UTC 2019-01-12 11:14下午):
感谢当前的回答者。当前的答案大多建议将doSomething()设置为异步,并等待logAboutSomethingGotten()。我也知道这一点,但因为它可能导致无休止的异步等待代码,所以我不喜欢这种解决方案。另外,涉及管道a.then(function(){console.log(“STOP”);})到logAboutSomethingGotten()
的选项也可以很容易地解决这个问题,但不是在所有情况下都可以,比如我问题的同步部分
因此,我特别感兴趣的是logAboutSomethingGotten()
是否返回一个值(例如,在进行Ajax调用之后,因为不推荐使用同步Ajax)。我可以用什么聪明的方法在同步流中使用此返回值?这样做->
async function doSomething() {
console.log("START");
await logAboutSomethingGotten();
console.log("STOP");
}
检查剪子-
函数promise\u GetSomething(){
返回新承诺(解决=>{
setTimeout(函数(){
决心(“3秒后得到的东西”);
}, 3000);
});
}
异步函数logAboutSomethingGotten(){
log(“在得到3秒的东西之前”);
var somethingget=wait promise_GetSomething();
console.log(somethingget);
log(“在得到3秒的东西之后”);
}
异步函数doSomething(){
控制台日志(“启动”);
等待logAboutSomethingGotten();
控制台日志(“停止”);
}
doSomething()
只需将doSomething
标记为async
,然后wait
logAboutSomethingGotten()代码>呼叫
如果asynclogAboutSomethingGotten()
返回一个值,如何同步获取和使用该值
异步结果永远不能同步使用。当然,在等待承诺之后,您可以始终正常使用返回值。将doSomething
函数设置为异步,并等待logAboutSomethingGotten
function promise_GetSomething() {
return new Promise(resolve => {
setTimeout(function () {
resolve("Something gotten after 3 sec.");
}, 3000);
});
}
async function logAboutSomethingGotten() {
console.log("Before getting 3-sec-something.");
var somethingGotten = await promise_GetSomething();
console.log(somethingGotten);
console.log("After getting 3-sec-something.");
}
async function doSomething() {
console.log("START");
await logAboutSomethingGotten();
console.log("STOP");
}
doSomething();
我对以同步方式使用异步结果特别感兴趣。事实上,我发现我可以不断地添加“异步”和“等待”。你能提供一个解决办法吗?@Olumide不。当我写never时,我的意思是这是不可能的。您必须到处添加async
和wait
。