Простой asyn c вопрос с ожиданием с возвратами функции - PullRequest
0 голосов
/ 21 июня 2020

У меня простая, но запутанная проблема с функциями asyn c. Я хочу sh просто вернуть значение, когда оно будет готово из функции.

Вот пример кода:

async function test() {
  setTimeout(function() {
    return 'eeeee';
  }, 5000);
}

test().then(x => {
  console.log(x)
});

Ответы [ 3 ]

1 голос
/ 21 июня 2020

Вы получите undefined сразу.

Понятно, что вы пытаетесь написать функцию sleep() asyn c, но помните, что setTimeout - это вызов функции syn c с функция обратного вызова будет выполнена в заданное время, поэтому, пока вы выполняете test(), вызов будет выполняться до конца и return undefined, поскольку у вас нет оператора возврата в теле функции, который будет передан вашему .then()

Правильный способ сделать это - вернуть обещание, которое будет разрешено через заданное время, которое продолжит вызов then.

async function sleep(time){
  return new Promise((resolve,reject) => {
    setTimeout(() => {
      resolve("echo str")
    },time)
  })
}

sleep(5000).then((echo) => console.log(echo))

вкратце

const sleep = async time => new Promise(resolve=>setTimout(resolve,time))
0 голосов
/ 21 июня 2020

с обещаниями

const setTimer = (duration) => {
      const promise = new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve('Done!');
        }, duration);
      });
      return promise;
    };
    
    setTimer(2000).then((res) => console.log(res));
0 голосов
/ 21 июня 2020

Функция asyn c должна возвращать обещание. Итак, чтобы исправить это, вы можете заключить свою функцию setTimeout в новое обещание, например:

async function test(){
  return await new Promise((resolve, reject) => {
      setTimeout(function(){
          resolve('eeeee');
      },5000);
  })
}

test().then(x => {
  console.log(x)
});

Вы можете узнать больше об async / await в документах MDN здесь . Надеюсь, это поможет!

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