为什么此基于承诺的代码返回未定义?

时间:2020-10-10 10:49:55

标签: javascript

我希望hello函数返回Promise。为什么它返回未定义?

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

有人可以用最基本的方式向我解释一下吗?

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

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


hello();

2 个答案:

答案 0 :(得分:1)

除非您resolve带有参数,否则您将一无所获。您想要:

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

这里的键是setTimeout()不会给您提供的函数任何参数,它只是在那时运行它。在这种情况下,它与:

// Wait ms milliseconds
resolve();

答案 1 :(得分:0)

您的wait函数返回一个Promise。但是,当您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);
    })
   
}