0

我有一个 Ember 承诺电话,如下所示;

var promise = new Ember.RSVP.Promise(function(resolve, reject) {
    return $.ajax({
    //want this common
        url: requestUrl,
        type: type, // HTTP method
        dataType: dataType, // type of data expected from the API response
        contentType: 'application/json; charset=utf-8',
        data: JSON.stringify(postData)
    })
    .done(function(data, status, xhrObject) {
    //But want this to be different
      // resolve call
    })
    .fail(function(xhrObject, status, error){
      // reject call
    });
})

我的问题是我可以为 $.ajax() 使用通用代码,但是对于 done() 回调有不同的实现,我可以通过从调用位置传递一些参数来检查它。

所以基本上,我想要

if (someparam == 'handleDone1')
    call resolve(data)
else
    call resolve({data})
4

2 回答 2

1

您当前正在通过将done函数表达式硬编码到其中来传递函数。

用变量替换它。将值作为函数参数传递给该变量。

或者,根本不要done在这里使用。只需返回的返回值$.ajax()done()在调用函数中调用它。

于 2016-05-27T10:28:04.753 回答
0

返回一个承诺而不是 ajax 调用。并将ajax调用包装成promise。

检查下面的代码。它可能会有所帮助。

function someFunction(resolve1, reject1) {
  return new Ember.RSVP.Promise(function(resolve, reject) {
    $.ajax({
    //want this common
        url: requestUrl,
        type: type, // HTTP method
        dataType: dataType, // type of data expected from the API response
        contentType: 'application/json; charset=utf-8',
        data: JSON.stringify(postData)
    })
    .done(function(data, status, xhrObject) {
      //But want this to be different
      // resolve call
      var dicision = resolve1();
      if(dicision){
        resolve(data);
      } else {
        resolve({data});
      }
    })
    .fail(function(xhrObject, status, error){
      // reject call
    });
}
于 2016-05-27T11:44:49.540 回答