使用异步/等待无法解决承诺

时间:2020-02-03 16:47:59

标签: javascript node.js promise

我正在尝试学习异步/等待创建示例代码的承诺

<html>
    <head>
        <script>
              async function getTested() {
              alert("line");
              let pp = await test1();
              alert(pp); //expected to print hello

              }

            async function test1 () {
                alert("line 9");
                let promise = await test2();
                alert(promise); //expected to print hello
                return promise;
            }

            function test2 () {
                alert("line 15");
                let promise = new Promise.resolve('hello');
                alert(promise);
                return promise;  
            }
        </script>
    </head>
    <body onload="getTested()"></body>
</html>

在这里,我使用async / await来解决我所承诺的承诺,除了在test1和getTested中打印'hello'之外。我在这里做什么错?

3 个答案:

答案 0 :(得分:2)

new Promise.resolve <-那里有问题。

初始化并返回Promise对象。

let promise = new Promise(function(r) {
    r("hello");
});

或者,您可以遵循与您想遵循的类似方法:

Promise.resolve("hello"); 

async function getTested() {
  let pp = await test1();
  console.log(pp); //expected to print hello

}

async function test1() {
  let promise = await test2();
  console.log(promise); //expected to print hello
  return promise;
}

function test2() {
  return Promise.resolve("hello");
}

getTested()

答案 1 :(得分:0)

您可以使用Promise.resolve(value)

将test3函数更改为

function test2 () {
  alert("line 15");
  let promise = Promise.resolve('hello');
  alert(promise);
  return promise;  
}

答案 2 :(得分:0)

如果您没有将new放在Promise.resolve('hello')之前,它就可以工作。

我已经在您的字符串中添加了一些字符串,因此我们可以看到哪个函数正在输出每个字符串。这可以帮助您更清楚地了解事情发生的顺序。

我使用的是console.log而不是alert(),因此您可以通过运行以下代码片段一次查看所有内容:

<html>
    <head>
        <script>
              async function getTested() {
              console.log("getTested: line1");
              let pp = await test1();
              console.log(`getTested pp: ${pp}`); //expected to print hello
              }

            async function test1 () {
                console.log(`test1: line 9`);
                let promise = await test2();
                console.log(`test1: ${promise}`); //expected to print hello
                return promise;
            }

            async function test2 () {
                console.log("test2: line 15");
                let promise = Promise.resolve('hello');
                console.log(`test2: ${await promise}`);
                return promise;  
            }
        </script>
    </head>
    <body onload="getTested()"></body>
</html>