Javascript не могу найти свою функцию в обещании - PullRequest
2 голосов
/ 20 июня 2020

Я хочу отладить функцию, которая возвращает обещание, и для этого мне нужна функция сна. Я нашел этот:

function sleep(ms) {
  return new Promise((resolve) => {
    setTimeout(resolve, ms);
  });
} 

, и он работает, когда используется вне обещания. Однако, когда я хочу использовать его в обещании, я получаю сообщение об ошибке, что сон не найден. Это мой код:

async function f(filename) {
  return new Promise((resolve, reject) => {
    await sleep(1000);

    /*
      rest of function
    */
  });
}

Ответы [ 3 ]

2 голосов
/ 20 июня 2020

Попытайтесь заменить return new Promise ((resolve, reject) => {}) в функции f на return new Promise (asyn c (resolve, reject) => {}). Надеюсь, это решит вашу проблему

async function f(filename) {
  return new Promise(async (resolve, reject) => {
    await sleep(1000);

    /*
      rest of function
    */
  });
}
0 голосов
/ 20 июня 2020

Однако, когда я хочу использовать его в обещании

, вы не должны никогда не создавать другое обещание внутри new Promise исполнителя . Вместо этого вызовите функцию sleep внутри окружающей функции f (которую вы уже отметили как async, предположительно для использования ключевого слова await):

async function f(filename) {
  await sleep(1000);
  return new Promise((resolve, reject) => {
    /* rest of function  */
  });
}

Ваша проблема заключалась также в том, что Функция (resolve, reject) => {…} не является функцией async, поэтому при попытке использовать await внутри произошла синтаксическая ошибка (в строгом режиме), а также могло появиться сообщение об ошибке о неожиданном токене sleep после await.

0 голосов
/ 20 июня 2020

Привет, попробуйте использовать приведенный ниже код, добавьте asyn c в код возврата, потому что вы используете ожидание внутри возврата

function sleep(ms) {
    return new Promise((resolve) => {
        console.log('inside sleep');
      setTimeout(resolve, ms);
    });
  } 
   function f(filename) {
    return new Promise( async(resolve, reject) => {
      await sleep(7000);
      
      /*
        rest of function
      */
    });
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...