角度链接AJAX调用

时间:2015-06-11 06:16:15

标签: javascript ajax angularjs promise

我必须做2个AJAX调用。第二个取决于第一个呼叫结果。现在我这样做:

BACKUP DATABASE MyDatabase TO disk  = 'G:\Backup\MyDatabase.bak' WITH DIFFERENTIAL

服务:

Service.getA(car).then(function(carInfo) {
    if (carInfo.success) {
        Service.getB(carInfo.number).then(function(holderInfo) {
            console.log(holderInfo);
        });
    }
});

getA: function(car) { return Server.execute({ method: 'GET', url: 'a/a', params: { car: car }, }).then(function (carInfo) { return carInfo; }); }, 方法类似 - 只是另一个URL和另一个参数。我正在学习角度,并希望使用promises和defers实现此代码(谷歌建议代码将更beautoful)。我怎么能这样做?

2 个答案:

答案 0 :(得分:3)

你完成它的方式通常是如何链接ajax调用,虽然你可以简化这一点:

  Service.getA(car).then(function(carInfo) {
     Service.getB(carInfo.number).then(function(holderInfo) {
        console.log(holderInfo);
     });
  });

对于错误,您的服务器返回错误请求400,然后您可以链接.error()回调,而不是根据success属性确定成功。

正如Cerbrus指出的,$q.all([promise1, promise2])并行执行它们而不是另一个。

你的getA方法应该像这样返回promise:

 getA: function(car) {
    return Server.execute({
       method: 'GET',
       url: 'a/a',
       params: {
           car: car
       },
    });
  }

如果你真的需要从服务中绑定额外的回调,你可以这样做:

 getA: function(car) {
    return Server.execute({
        method: 'GET',
        url: 'a/a',
        params: {
            car: car
        },
    }).then(function (carInfo) {
        //do something?

    }, function () {
        //handle error?
    });
},

答案 1 :(得分:0)

正如您所说,除了网址之外,两者都是相似的,参数I&#dd;

request : function(url, params) {
    return Server.execute({
        method: 'GET',
        url: url,
        params: params,
    });
},

称之为

Service.request('a/a', param).then(function(carInfo) {
    if (carInfo.success) {
        Service.request('b/b', carInfo.number).then(function(holderInfo) {
            console.log(holderInfo);
        });
    }
});