Javascript 如何使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

下面是JS代码:

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
另外,如果async
logAboutSomethingGotten()
返回一个值,如何同步获取和使用该值

编辑(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()呼叫

如果async
logAboutSomethingGotten()
返回一个值,如何同步获取和使用该值


异步结果永远不能同步使用。当然,在等待承诺之后,您可以始终正常使用返回值。

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