[英]Can I force the resolution of a promise to await results in javascript?
这个问题有点学术性,因为我并不需要这样做。
我想知道是否可以强制将promise解析为函数的返回值,以使函数调用者不知道该函数包含promise异步操作。
在.NET中,我可以通过使用Task[]
上的函数或return Task.Result
来执行类似的操作,这将导致调用方等待任务的完成,并且调用方将不知道或不在乎使用任务已完成了工作。
如果您使用的是ES6,则可以使用生成器来生成类似这样的代码。 它实质上接近于对诺言的“阻塞”,因此您会看到一个长期运行的方法,该方法只返回您想要的值,但异步/承诺却在幕后。
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/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.