Я новичок в додзё, но у меня есть определенная ошибка, связанная с отложенным 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() создает Deferred, который я хочу использовать для цепочки разрешения Deferred (см. дополнительный код после основного текста).
Ошибка, которую я получаю,
editOptionsDialog_fetchData(id, fieldName).then(function(data)...) is undefined
Поскольку сообщение об ошибке появляется сразу после обращения к функции openEditor, понятно, что значение вызова функции должно быть неопределенным, поскольку обратный вызов еще не выполнен.
Мой вопрос заключается в том, где это непонимание отложенного API должно быть в моем коде, поскольку цель состоит в том, чтобы оценить вызов функции editOptionsDialog КАК ТОЛЬКО асинхронный вызов будет выполнен и вызван, А НЕ ДО того, как этот вызов завершится (в состояние, в котором вызов функции по-прежнему приводит к неопределенности, но я думал, что это и есть цель then-return).
Спасибо за вашу помощь
--- дополнительный код для 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);
});
}