【发布时间】:2015-06-09 01:00:31
【问题描述】:
我显然误解了 js 承诺的解决方式或“返回”的语义。
我被一个期望我同步的函数调用——返回一个值。计算该值需要一些异步代码(特别是 dstore Collection 上的 ForEach 方法
我要完成的工作大致是这样,但这不起作用,因为函数 mySynchronousFunction 没有返回值。
function mySynchronousFunction() {
var accumulator = {};
var myPromise = doAsynchronousThingThatSideEffectsAccumulator();
// Now my caller is expecting the value of accumulator.
myPromise.then(function() {return accumulator;})
}
我知道 JS 必须允许单线程实现,所以阻塞并不酷,但必须有一些模式可以将异步代码与同步代码粘合在一起,我刚刚错过了。
【问题讨论】:
-
这不是关于允许单线程实现 - 所有实现都必须是单线程的。
-
@meagar 这不是真的 - 没有说所有实现都是单线程的 - 例如 Java 中的 Rhino。
-
无法添加答案,但这对我有帮助:tivix.com/blog/making-promises-in-a-synchronous-manner
-
听起来
await会解决这个问题,即return await myPromise
标签: javascript asynchronous promise deferred