Обещания ждут разных результатов - PullRequest
1 голос
/ 13 марта 2019

Почему в текущем коде в первой функции со стрелкой мы получаем значение разрешения обещания some data в виде строки, а во втором мы получаем Promise { 'some data' }?

const resolveAfter2Seconds = ()=> {
         return new Promise(resolve => {
            setTimeout(function() {
                resolve("some data");
            }, 2000);}
        );
    };

    (async()=>{
        let prom=await resolveAfter2Seconds()
        console.log(prom)
    })();



    (async()=>{
        let prom=resolveAfter2Seconds()
        await prom
        console.log(prom)
    })();

Ответы [ 2 ]

6 голосов
/ 13 марта 2019

Поскольку await prom не изменяет то, к чему относится переменная prom, оно просто ожидает обещания, на которое оно ссылается, для расчета.prom все еще относится к обещанию, когда вы его регистрируете.Если вы хотите обновить prom результатом обещания, вам нужно сделать это явно:

prom = await prom;
0 голосов
/ 13 марта 2019

Если вы просто запустите resolveAfter2Seconds(), эта функция сама по себе возвращает Promise. Так что prom = resolveAfter2Seconds(); всегда будет иметь обещание в качестве значения переменной. При написании await перед resolveAfter2Seconds() вы говорите JS дождаться обещания, возвращаемого функцией, которая должна быть разрешена, до того, как будет установлена ​​переменная, затем возвращенное значение обещания передается в переменную

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...