Асинхронная функция, вызываемая с помощью вызова или применения, никогда не разрешается - PullRequest
0 голосов
/ 07 января 2019

Функции, которые вызываются с помощью call или применяются с использованием await, никогда не разрешаются, проверьте следующий фрагмент кода

const obj = {
   resolveAfter2Seconds: function() {
    return new Promise(resolve => {
      setTimeout(() => {
        resolve('resolved');
      }, 2000);
    });
  }
}

async function asyncCall() {
  console.log('calling');
  var result = await obj.resolveAfter2Seconds();
  console.log(result);//resolved

 var result2 = await obj.call("resolveAfter2Seconds");
  console.log(result2);//never alled
}

asyncCall();

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Я задавал вопрос неправильно, в итоге я использовал правильный синтаксис следующим образом

const obj = {
   resolveAfter2Seconds: function() {
    return new Promise(resolve => {
      setTimeout(() => {
        resolve('resolved');
      }, 2000);
    });
  }
}

async function asyncCall() {
  console.log('calling');
  var result = await obj.resolveAfter2Seconds();
  console.log(result);//resolved

 var result2 = await obj["resolveAfter2Seconds"].call();
  console.log(result2);//never alled
}

asyncCall();
0 голосов
/ 07 января 2019

Просто разверните комментарий @CertainPermances - вызов - это метод функции, используемый для назначения опции этой функции внутри функции, ее нельзя использовать для объекта

(function() {
    const obj = {
        resolveAfter2Seconds : function() {
            return new Promise(resolve => {
                setTimeout(() => {
                resolve('resolved');
                }, 2000);
            });
        }
    }

    async function asyncCall() {
        console.log('calling');
        var result = await obj.resolveAfter2Seconds();
        console.log(result);//resolved

        // var result2 = await obj.call("resolveAfter2Seconds");    caused an eror
        var result2 = await obj.resolveAfter2Seconds();
        // or
        var result2 = await obj.resolveAfter2Seconds.call( obj /* perhaps */); // which makes no difference at all because this = obj anyway
        console.log(result2);
    }

    asyncCall();

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