Javascript 使用$.when执行第一个ajax,然后在$.when()中执行下一个。完成

Javascript 使用$.when执行第一个ajax,然后在$.when()中执行下一个。完成,javascript,jquery,ajax,Javascript,Jquery,Ajax,我知道这已经被问了很多次了,但是我在使用$.when按顺序执行$.ajax时遇到了问题 在下面的示例代码中,我希望在$内运行第一个ajax,然后在$内运行第二个$.ajax 当我运行代码时,第二个$.ajax立即执行,而不必等待第一个$.ajax完成。请问,有人能给我指出正确的方向吗?第页有一个很好的例子。下面是一个简短的例子: var api = { flag: $.Deferred(), getFoo: function(callback) { $.when(

我知道这已经被问了很多次了,但是我在使用$.when按顺序执行$.ajax时遇到了问题

在下面的示例代码中,我希望在$内运行第一个ajax,然后在$内运行第二个$.ajax


当我运行代码时,第二个$.ajax立即执行,而不必等待第一个$.ajax完成。请问,有人能给我指出正确的方向吗?

第页有一个很好的例子。下面是一个简短的例子:

var api = {
    flag: $.Deferred(),
    getFoo: function(callback) {
        $.when(this.flag).done(function() {
            console.log('getFoo');
        });
    },
    getBar: function() {
        console.log('getBar');
        this.flag.resolve();
    }
}

我们需要返回异步操作的承诺 试试这个:

getFoo: function(callback) {
    this.getBar().then(function(){
        chrome.storage.local.get(['bar'], function(data) {
            // omitted some code here for brevity
            $.ajax({
                type: 'GET',
                url: /api/foo/,
                dataType: 'json'
            }).done(function(result) {
                console.log('success', 'went here!');
            }).fail(function(request) {
                console.log('failed', 'went here!');
            });
        });
    });
},
getBar: function() {
    var deferred = $q.defer();
    chrome.storage.local.get(['data1'], function(data) {
        if(typeof data['data1'] !== 'undefined') {
            // omitted some code here for brevity
            $.ajax({
                type: 'POST',
                url: /api/bar/,
                data: data['data1'],
                dataType: 'json'
            }).done(function(result) {
                deferred.resolve(result);
            }).fail(function(xhr, status, error) {
                deferred.reject(error);
            });
        }
    });
    return deferred.promise;
}
$。当期望承诺作为参数时,this.getBar不会返回承诺。。。它不会返回任何东西!
getFoo: function(callback) {
    this.getBar().then(function(){
        chrome.storage.local.get(['bar'], function(data) {
            // omitted some code here for brevity
            $.ajax({
                type: 'GET',
                url: /api/foo/,
                dataType: 'json'
            }).done(function(result) {
                console.log('success', 'went here!');
            }).fail(function(request) {
                console.log('failed', 'went here!');
            });
        });
    });
},
getBar: function() {
    var deferred = $q.defer();
    chrome.storage.local.get(['data1'], function(data) {
        if(typeof data['data1'] !== 'undefined') {
            // omitted some code here for brevity
            $.ajax({
                type: 'POST',
                url: /api/bar/,
                data: data['data1'],
                dataType: 'json'
            }).done(function(result) {
                deferred.resolve(result);
            }).fail(function(xhr, status, error) {
                deferred.reject(error);
            });
        }
    });
    return deferred.promise;
}