javascript - 我可以在 javascript 中强制解决等待结果的 promise 吗?

标签 javascript asynchronous promise bluebird

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

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

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

最佳答案

如果您使用的是 ES6,则可以使用生成器来编写这样的代码。它本质上接近于对 promise 的“阻塞”,因此您有一个长时间运行的方法的外观,它只返回您想要的值,但 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 上编译

关于javascript - 我可以在 javascript 中强制解决等待结果的 promise 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31323508/

相关文章:

javascript - 如何在循环中将字符串追加到字符串?

javascript - Ext.Net - 从代码后面调用 javascript 函数

ios - Swift:如何通过完成处理程序(闭​​包)的引用存储对象数组?

angular - 如何让 Jasmine 等待一个 promise 被解决或拒绝?

javascript - 另一个 Promise.all 内的 Promise.all 似乎在完成之前退出,并显示未从 Promise 返回的警告

javascript - 如何防止 promise 在没有箭头功能的情况下丢失上下文

javascript - Vue router-view 加载父组件而不是自己的组件

php - JSON 中的关联数组解码

javascript - document.ready 和 async 有什么区别?

java - android Async - 循环更新对话框消息