如何在Firefox控制台中等待承诺解决

时间:2018-12-13 12:45:05

标签: javascript firefox promise

我在Firefox中打开了开发人员控制台,并且必须遵守一些承诺。我真的很喜欢一些阻塞语法,它们只会等待promise解决并直接返回结果。现在我必须要做类似的事情:

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开发工具控制台,并且正在寻找一些简单的方法来等待承诺解决。我知道我可以做IIFE。可以针对一个或两个诺言来做到这一点,但不能仅仅针对其中的十个诺言而做,因为那是很多代码。我想要类似的东西:

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

只会阻塞直到承诺被解决并返回已解决的值。这样我就可以简单地将其用作:

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

它不必一定是功能,可以是一些技巧,因为它不会在脚本或Node中使用,而只会在开发工具中使用。在控制台中为每个承诺编写IIFE只是可怕的人体工程学。

Edit2:@Andy建议使用Promise.all,但是由于我没有同时拥有所有的承诺,所以这不是一个选择。基本上,我在REPL中,我需要一个简单易行的方法来评估,检查/存储/确定下一步要执行的操作,然后重复执行。我不能一直写IIFE

谢谢

1 个答案:

答案 0 :(得分:0)

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);
})();