Как дождаться обещания разрешить в консоли Firefox - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть консоль разработчика, открытая в Firefox, и мне приходится работать с некоторыми обещаниями.Я действительно оценил бы некоторый блокирующий синтаксис, который бы просто ждал, пока обещание не разрешится, и напрямую вернет результат.Прямо сейчас я должен сделать что-то вроде:

var result; promise.then((res) => { result = res})

каждый раз, когда я действительно устал.Я попробовал что-то вроде этого:

resolve = function(promise) { var res; var done = false; promise.then(r => {res = r; done = true}); while(!done) {}; return res; }

Но оно застряло навсегда.Есть что-то - что-нибудь, как легко получить результат?

Редактировать: Прежде всего я не имею дело со средой Node или каким-то JS-скриптом.Я знаю, как бороться с ними там.Я имею дело с консолью инструментов Fixrefox dev и ищу простой способ дождаться выполнения обещаний.Я знаю, что я могу сделать IIFE.Это может быть сделано для одного или двух обещаний, но не для дюжины из них просто потому, что это много кода.Я хочу что-то вроде:

function = resolvePromise(promise) { ... };

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

var result = resolvePromise(promise); // result now holds the actual value

Это не обязательно должно быть функция и может быть хаком, потому что это не будет использоваться в скриптах или Node, а только в инструментах разработки.Запись IIFE в консоли для каждого обещания - просто ужасная эргономика.

Edit2: @Andy предложила использовать Promise.all, но, поскольку у меня нет всех обещаний одновременно, это не вариант.В основном я нахожусь в REPL, где мне нужен короткий и простой способ, как оценить / осмотреть / сохранить / решить, что делать дальше, а затем повторить.Я не могу писать IIFE все время

Спасибо

1 Ответ

0 голосов
/ 13 декабря 2018

async / await - лучший современный способ решить эту проблему.

// Mock fetch function to return data
// after 2s
function fetch() {
  const n = Math.floor(Math.random() * (100 - 1) + 1);
  return new Promise(resolve => {
    setTimeout(() => resolve(n), 1000);
  });
}

// Push a load of promises into an array
const arr = [];
for (let i = 0; i < 20; i++) {
  arr.push(fetch());
}

// async immediately-invoked function expression.
// `Promise.all` gathers up all the results of all
// the promises in the array and returns its own promise
// and `await` pauses until that promise resolves
(async () => {
  console.log('Please wait for the result');
  const result = await Promise.all(arr);
  console.log(result);
})();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...