Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有人能用async/await向我解释一下以下内容吗?_Javascript_Node.js_Asynchronous - Fatal编程技术网

Javascript 有人能用async/await向我解释一下以下内容吗?

Javascript 有人能用async/await向我解释一下以下内容吗?,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,有人能详细解释一下这个代码吗 const promiseFactory = () => new Promise(resolve => setTimeout(() => resolve(1), 5000)); 如果我将其称为以下内容: const consumer = async() => { promiseFactory().then(s => console.log(s)); console.log("next step"); } 将在5秒后输出“

有人能详细解释一下这个代码吗

const promiseFactory = () =>
  new Promise(resolve => setTimeout(() => resolve(1), 5000));
如果我将其称为以下内容:

const consumer = async() => {
  promiseFactory().then(s => console.log(s));
  console.log("next step");
}
将在5秒后输出“下一步” 但如果我用下面的话来称呼它

const consumer = async() => {
  const val = await promiseFactory();
  console.log(val);
  console.log("next step");
}
将输出1,然后是“下一步”
所以说到底,promises和async/await不仅仅是语法上的区别?

您应该将
console.log(“下一步”)到承诺的
中,然后
。Javascript不会停止执行。使用wait,您将首先等待,然后继续执行

const consumer = /* you don't need the async here */ () => {
  promiseFactory().then(s => {
    console.log(s));
    console.log("next step");
  }
}
  • 您可以拨打
    promiseFactory
  • 您可以调用`console.log(“下一步”)
  • 在将来的某个时候,承诺会得到解决,您可以调用
    console.log
  • 您可以
    promiseFactory
  • 在将来的某个时候,承诺会得到解决,您可以调用
    console.log(val)
    ,然后调用
    console.log(“下一步”)

  • 所以说到底,承诺和异步/等待不仅仅是语法上的区别

    它们本质上是,您只是没有编写等价的代码

    使用
    async
    wait
    相当于:

    const consumer = async () => {
        promiseFactory().then(s => {
            console.log(s);
            console.log("next step");
        );
    };
    
    const consumer = async() => {
      doAsyncStuff();
      console.log("next step");
    }
    
    const doAsyncStuff = async () {
        const s = await promiseFactory();
        console.log(s)
    }
    
    所有代码都在
    之后,等待
    的回调中的
    ,然后
    ,而不仅仅是下一行

    您使用
    相当于:

    const consumer = async () => {
        promiseFactory().then(s => {
            console.log(s);
            console.log("next step");
        );
    };
    
    const consumer = async() => {
      doAsyncStuff();
      console.log("next step");
    }
    
    const doAsyncStuff = async () {
        const s = await promiseFactory();
        console.log(s)
    }
    

    这里有一个很好的讨论:感谢您的回答,我知道这一点,我的问题是,如何使用async/await将等效代码写入上面的代码块?