Обещание не разрешается с помощью async / await - PullRequest
0 голосов
/ 03 февраля 2020

Я пытаюсь научиться асинхронному / ожидаю обещания. Я создал демонстрационный код

<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 для разрешения обещания, которое я исключил, чтобы напечатать 'hello' в test1 и getTested. Что не так я здесь делаю?

Ответы [ 4 ]

2 голосов
/ 03 февраля 2020

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()
0 голосов
/ 03 февраля 2020

Удалите «новое» перед Обещанием.

Сделайте:

let promise = Promise.resolve('hello');

Вместо:

let promise = new Promise.resolve('hello');
0 голосов
/ 03 февраля 2020

Это работает, когда вы не помещаете 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>
0 голосов
/ 03 февраля 2020

вы можете использовать Promise.resolve (значение)

изменить функцию test3 на

function test2 () {
  alert("line 15");
  let promise = Promise.resolve('hello');
  alert(promise);
  return promise;  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...