这个问题有点学术性,因为我没有真正需要这样做。
我想知道我是否可以强制将 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/