我的设计可能有问题,但我有一个Ajax函数
示例:
function insertEvent(newEventID, newEventStartTime, newEventEndTime) {
var promise = $.ajax({
type : "post",
dataType : "json",
url : '/myapp/insertEvent',
data : JSON.stringify({'id' : newEventID, 'startTime': newEventStartTime, 'endTime' : newEventEndTime
})
});
promise.then(function(data) {
// some additional business logic...
var resultObj = {'attr1' : attr1, 'attr2' : attr2};
});
return promise; // To outside dependendencies
// But ALSO need to return resultObj to outside dependencies
}
这可能吗?调用insertEvent
的函数需要
一旦出现,他们将从此功能
中查看resultObj
var resultObj = insertEvent(..);
换句话说,我希望我可以将自定义变量推送到promise
对象中,如果可能的话。
答案 0 :(得分:2)
我并不完全按照您的意图去做,但如果您真的有多件事需要回复,可以选择以下几种选择:
从insertEvent()
返回一个promise,并使返回的promise的解析值成为一个包含多个属性/值的对象。然后,当你对promise做.then()
时,解析后的值将是一个具有多个属性的对象。
从insertEvent()
返回一个对象,该对象中有多个属性,其中一个是异步部分的承诺,以及代表已知事物的其他属性。
如果你无法对数据做任何事情,直到承诺得到解决,那么#1可能是一个更好的方法。
以下是#1的一个例子:
function insertEvent(newEventID, newEventStartTime, newEventEndTime) {
return $.ajax({
type : "post",
dataType : "json",
url : '/myapp/insertEvent',
data : JSON.stringify({'id' : newEventID, 'startTime': newEventStartTime, 'endTime' : newEventEndTime
})
}).then(function(data) {
// some additional business logic...
var resultObj = {'attr1' : attr1, 'attr2' : attr2};
// return resultObj as the resolved value of the promise chain
return resultObj;
});
}
// usage
insertEvent(...).then(resultObj => {
// use resultObj here
});