在我的代码中,我有GUI函数,它们具有一些业务逻辑,然后调用Ajax子函数。示例添加/删除/更新活动。
添加/删除已经编码。 更新 GUI功能为Delete->Add
,因此我想链接调用各自Ajax功能的GUI功能删除/添加。但这可能吗?我无法访问潜在的Promises。我想保留GUI功能的封装业务逻辑。
假设我有这个:
function deleteActivity() {
// 1. ... do some business logic first
// 2. Call respective Ajax method
var promise = ajaxDeleteActivity(id);
promise.then(function() {
//...
});
}
function addActivity(id) {
// 1. ... do some business logic first
// 2. Call respective Ajax method
var promise = ajaxAddActivity(id);
promise.then(function() {
//...
});
}
function updateActivity(id) {
// I'd like to chain the GUI functions w/business logic, but since I don't have
// access to the underlying Promises, I'm not really chaining them!
// 1.
deleteActivity(id);
// 2.
addActivity(newId);
}
答案 0 :(得分:2)
我有从Ajax函数返回的promise。但我不能在GUI函数中返回那些承诺,可以吗?
是的,您可以 - 只返回then
的结果:
function deleteActivity() {
// 1. ... do some business logic first
// 2. Call respective Ajax method
var promise = ajaxDeleteActivity(id);
return promise.then(function() {
// ^^^^^^------------------------------------------ ****
//...
});
}
function addActivity(id) {
// 1. ... do some business logic first
// 2. Call respective Ajax method
var promise = ajaxAddActivity(id);
return promise.then(function() {
// ^^^^^^------------------------------------------ ****
//...
});
}
...然后(没有双关语)使用它:
function updateActivity(id) {
// I'd like to chain the GUI functions w/business logic, but since I don't have
// access to the underlying Promises, I'm not really chaining them!
// 1.
return deleteActivity(id).then(function() {
// ^^^^^^------------------------------------------ ****
// 2.
return addActivity(newId);
// ^^^^^^-------------------------------------- ****
});
}
请注意,对then
(或catch
)的调用会创建一个新承诺(让我们称之为newPromise
),然后根据then
/ catch
回调(返回值,返回promise或抛出错误)。如果回调返回值,则使用该值解析newPromise
。如果回调返回一个承诺,则根据该承诺是解析还是拒绝来解析/拒绝newPromise
。如果回调引发错误,则newPromise
会因该错误而被拒绝。
由于我们已在上面的then
中返回updateActivity
的结果,因此其他内容也可以在其上构建。