是否有解决异步功能的方法

时间:2019-06-04 20:05:26

标签: javascript asynchronous async-await

最近我已经开始了解异步功能是JS 所以我写了一个必须发出请求的代码,并将其从请求中接收到的数据写入CSV中,问题是写函数没有等待请​​求响应,因此它只是写了未定义的

出于调试目的,我编写了新代码以查看异步功能如何工作,因此我有下一种情况

我有3个函数log1(),log2(),main(), 我希望:

当我调用main()时,它应该调用log1(),等到它完成所有语句,然后再调用log2()

所以我写了这段代码:

function slowFunction(){
  setTimeout(() => {
    console.log('1')
  }, 2000);
}
function log1() {
  return new Promise(resolve =>{
    resolve(slowFunction())
  })
}
function log2() {
    console.log('2');
}

async function main() {
  var aux = await log1();
  log2();
}

main();

所以我希望它能输出

  

1

     

2

但是它确实输出了

  

2

     

1

我要注意不能编辑slowFunction,您应该将其视为需要 unknown 的时间才能执行的函数,因此我需要等待它完成,然后程序应执行log2();

2 个答案:

答案 0 :(得分:0)

问题出在slowFunction上。似乎您想slowFunction在超时后解决,但它会立即返回当前写入的状态。您需要重写slowFunction才能返回Promise,或者只需重写log1

function log1() {
    return new Promise((resolve) => {
        setTimeout(() => {
            console.log('1');
            resolve();
        }, 2000);
    });
}

答案 1 :(得分:0)

确保所有异步功能都用promise包装。

function slowFunction(){
  return new Promise(resolve =>{
    setTimeout(() => {
      resolve("1")
    }, 2000);
  })
}

async function log1() {
  let ret = await slowFunction()
  console.log(ret)
}

function log2() {
  console.log('2');
}

async function main() {
  var aux = await log1();
  log2();
}

main();