很明显,我对JavaScript Promise的解析或者"return"语义有些误解。
一个要求我返回值的函数在调用我时期望我是同步的。计算这个值需要一些异步代码(具体来说,是在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必须允许单线程实现,以避免阻塞,但一定有一些将异步代码与同步代码粘合在一起的模式,我可能只是错过了它们。
await
可以解决这个问题,即return await myPromise
。 - Alex