运行道场 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 正在创建并返回,但它实现的承诺不是我的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()
与在 评估的对象不同myJsonRest.put().then()
。在这一点上我唯一的理论是 JsonRest 在它自己的异步时间上添加了位于put()
请求和我的 then 处理程序之间的承诺。由于 ioArgs 没有通过 promises 进行,所以在它到达我的函数时它会丢失。将我的行为 ( then()
) 分配给 Promise 触发后的行必须将我的行为首先放在要解决的 Promise 堆栈中。
任何见解都值得赞赏。