GUI函数包含Ajax调用,我可以链接GUI函数吗?

时间:2017-12-18 16:00:55

标签: jquery ajax

在我的代码中,我有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);
}

1 个答案:

答案 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的结果,因此其他内容也可以在其上构建。