gpt4 book ai didi

javascript - Dojo JsonRest Promise -- 异步调用的顺序

转载 作者:行者123 更新时间:2023-12-02 18:30:13 26 4
gpt4 key购买 nike

运行道场1.8.4

使用 JsonRest(不是 JsonRestStore),我向端点发出 put 请求,然后获取结果并从请求响应中收集位置信息,如下所示:

var promise = myJsonRest.put(data).then(function(){
// act when put completes successfully
promise.ioArgs.xhr.getResponseHeader('location');
});

直到最近,这都没有出现问题。然后我开始看到一个 TypeError,其中 promise 不再包含 ioArgs(无法读取未定义的属性 xhr)。

断点和单步执行堆栈表明 ioArgs 正在被创建并返回,但它履行的 promise 不是我的 then(function () { promise.ioArgs /* etc... */ });

我找到的解决方案是将上面的代码更改为这个...

var promise = myJsonRest.put(data);
promise.then(function(){
// act when put completes successfully
promise.ioArgs.xhr.getResponseHeader('location');
});

...它工作正常,但我无法证明为什么。

不可能是myJsonRest.put()分配的promise与 myJsonRest.put().then() 处评估的对象不同。我目前唯一的理论是 JsonRest 在它自己的异步时间上添加了落在 put() 之间的 promise 。请求和我的处理程序。由于 ioArgs 没有跨 Promise 传递,因此当它到达我的函数时它就会丢失。将我的行为( then() )分配给 Promise,在 Promise 被触发后的行必须将我的行为放在要解决的 Promise 堆栈上的第一个位置。

任何见解都值得赞赏。

最佳答案

It cannot be that the promise assigned by myJsonRest.put() is not the same as the object evaluated at myJsonRest.put().then().

它与 myJsonRest.put() 部分是同一个对象,不用担心。您的问题是,在第一个代码片段中,您将 .then() 方法调用的结果分配给 promise ,并且确实返回了不同的 promise (请参阅 the docs ) .

比较

var promise;
( promise = myJsonRest.put(data).then(function(){…}) );

var promise;
( promise = myJsonRest.put(data) ).then(function(){…});

关于javascript - Dojo JsonRest Promise -- 异步调用的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17866075/

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