運行道場1.8.4道場JsonRest承諾 - 異步調用順序
使用JsonRest(不是JsonRestStore),我做一個PUT請求到終點,並得到結果返回,並從收集位置信息請求響應如下:
var promise = myJsonRest.put(data).then(function(){
// act when put completes successfully
promise.ioArgs.xhr.getResponseHeader('location');
});
直到最近,這工作沒有問題。然後我開始看到一個TypeError,其中承諾不再包含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()
請求和我的處理程序之間的承諾。由於ioArgs不承諾承諾,它到達我的函數時會丟失。將我的行爲(then()
)分配給承諾後觸發的承諾必須將我的行爲首先放在要解決的承諾棧上。
任何洞察力是讚賞。