【问题标题】:Why does this promise based code return undefined?为什么这个基于承诺的代码返回未定义?
【发布时间】:2020-10-10 10:49:55
【问题描述】:

我希望 hello 函数返回一个 Promise。为什么返回 undefined?

我认为等待功能让我感到困惑。我试图解释我对它的理解,但无法用语言表达。

谁能用非常基本的术语向我解释一下。

    function wait (ms =0){
    return new Promise((resolve)=>{
    setTimeout(resolve, ms)
    })
    }

      async function hello(){
     const nw = await wait(2000);
     console.log(nw);
     }


hello();

【问题讨论】:

  • wait 返回一个承诺。但是当您await 承诺时,nw 是承诺的结果——在你的情况下是 undefined,因为你在没有任何参数的情况下调用 resolve——而不是承诺本身。
  • 你能帮我解释一下等待功能吗?我知道箭头函数是如何工作的,但这真的让我很困惑。
  • 那么这里的实际问题是什么? Promises 是如何工作的? async/await 是如何工作的?
  • 这个问题有帮助吗? stackoverflow.com/questions/39458201/…

标签: javascript


【解决方案1】:

除非你 resolve 有一个论点,否则你什么也得不到。你想要:

setTimeout(() => { resolve('hello') }, ms);

这里的关键是setTimeout() 没有给你给它的函数任何参数,它只是在那个时候运行它。在这种情况下,它与以下内容相同:

// Wait ms milliseconds
resolve();

【讨论】:

    【解决方案2】:

    您的wait 函数返回一个承诺。但是当您await 时,nw 是承诺的结果——在你的情况下是 undefined,因为你在没有任何参数的情况下调用 resolve——而不是承诺本身。

    您的代码(或多或少)与此相同

    
    function wait (ms = 0){
      return new Promise((resolve) => {
        setTimeout(() => { resolve(); }, ms)  //Resolve the promise after the given time
      });
    }
    
    function hello() {
      wait(2000)
        .then((result) => {
          const nw = result;
          console.log(nw);
        })
       
    }
    

    【讨论】:

      猜你喜欢
      • 2021-01-28
      • 2017-07-23
      • 2017-06-19
      • 2018-09-27
      • 2015-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多