gpt4 book ai didi

javascript - 如何阻止 JavaScript Promise 并返回解析结果?

转载 作者:行者123 更新时间:2023-12-02 22:31:11 26 4
gpt4 key购买 nike

我显然误解了 js Promise 的解析方式或“返回”的语义。

我被一个期望我同步的函数调用 - 返回一个值。计算该值需要一些异步代码(具体来说, 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 必须允许单线程实现,因此阻塞并不酷,但是必须有某种模式将异步代码粘合到同步代码,而我刚刚错过了。

最佳答案

您无法通过 Javascript 中的异步操作生成同步结果。你就是做不到。如果操作的任何部分是异步的,则整个结果也必须是异步的,并且您必须使用回调、promise 或其他此类机制在操作完成且结果准备就绪时进行通信。

如果您的异步操作已经返回一个 promise (看起来像这样),那么您应该从包装函数返回它:

function myWrapperFunction() {
var accumulator = {};
var myPromise = doAsynchronousThingThatSideEffectsAccumulator(accumulator);
// Now my caller is expecting the value of accumulator.
return myPromise.then(function(result) {
// operate on the accumulator object using the async result
return accumulator;
})
}

myWrapperFunction.then(function(accumulator) {
// write your code here that uses the accumulator result
});

您可能还想注意,通过副作用运行的函数很少是最好的设计模式。您也可以传入输入并让它通过已解决的 promise 返回输出,并完全避免副作用。

关于javascript - 如何阻止 JavaScript Promise 并返回解析结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29440632/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com