我可以强制解决承诺以等待 javascript 中的结果吗?

Can I force the resolution of a promise to await results in javascript?

这个问题有点学术性,因为我没有真正的需要来做这个。

我想知道我是否可以强制将承诺解析为函数的返回值,这样函数调用者不知道函数包含承诺的异步操作.

在 .NET 中,我可以通过在 Task[]return Task.Result 上使用函数来做这样的事情,这会导致调用者等待任务完成,而调用者不知道或不关心已使用任务完成工作。

如果您使用的是 ES6,则可以使用生成器来编写这样的代码。它基本上接近 'blocking' 的承诺,所以你有一个 long-运行 方法的外观,它只是 returns 你想要的值,但 async/promises 生活在封面。

let asyncTask = () =>
  new Promise(resolve => {
    let delay = Math.floor(Math.random() * 100);

    setTimeout(function () {
      resolve(delay);
    }, delay);
  });

let makeMeLookSync = fn => {
  let iterator = fn();
  let loop = result => {
    !result.done && result.value.then(res =>
      loop(iterator.next(res)));
  };

  loop(iterator.next());
};

makeMeLookSync(function* () {
  let result = yield asyncTask();

  console.log(result);
});

此处提供更多解释和来源:http://www.tivix.com/blog/making-promises-in-a-synchronous-manner/

Here is the code 在 Babeljs.io

上编译