我是很新的道场,但我有一定的误差处理延迟API我不禁道场/递延链机制不尊重异步调用
我调用的代码是
function openEditor(id, fieldName) {
editOptionsDialog_fetchData(id, fieldName).then(function(data){
console.log("done!");
});
console.log("leaving openEditor!");
}
调用该函数
function editOptionsDialog_fetchData(id, fieldName) {
require(["dojo/ready", "dojo/data/ObjectStore", "dojo/Deferred"], function(ready, ObjectStore, Deferred) {
var store;
var def;
switch (fieldName) {
case "degree":
store = new degreeStore();
def = store.getJsonData();
break;
case "faculty":
store = new facultyStore();
def = store.getJsonData();
break;
default:
console.log("error in editOptionsDialog_fetchData: " + fieldName);
}
return def.then(function(data){
store.data = data.items;
editOptionsDialog_select.setStore(new ObjectStore({ objectStore : store }));
editOptionsDialog_select.store.query({ "id" : id });
editOptionsDialog_select.startup();
});
});
}
其中store.getJsonData()创建一个延迟,我想使用链接递延解决所(见正文后附加代码)。
我收到的错误是
editOptionsDialog_fetchData(id, fieldName).then(function(data)...) is undefined
由于错误信息出现访问openEditor功能之后,很明显,该函数调用的值必须未定义,因为回调尚未完成。
我的问题是,在延迟API的误解必须在我的代码中,因为目的是评估editOptionsDialog ASON的函数调用,因为异步调用已完成并被调用支持,并且在此调用之前不存在完成(在函数调用仍然导致未定义的状态,但我认为这是当时返回的目的)。
THX对您有所帮助
---附加代码getJsonData()---
getJsonData: function() {
return xhr(this.handlerUrl, {
handleAs: "json",
method: "POST",
data: {
action: "getJsonData"
}
}).then(function(data){
return data;
}, function(err){
alert("Data cannot be fetched in degreeStore.getJsonData! " + err);
});
}
Sry,编辑!问题仍然没有解决... –
我更新了我的答案。 –
用于那个总结的坦克。在你的情况下,这个例子非常完美。但有一件事我没有明确提到的是,opensitor函数在fetchdata例程的独立require子句中。无论如何,这并没有让我清楚,为什么fetchData的调用发生得太早,因此不会返回延迟...导致不处理then方法。 –