我如何首先调用函数,然后在javascript

时间:2017-12-21 03:59:18

标签: javascript jquery ajax callback

我想首先调用checkifPresentInActiveProjLib函数,然后调用checkifPresentInClosedProjLib函数。我该如何实现?

checkifPresentInActiveProjLib(function(flgAc) {
    if (flgAc === "active_found")
        // do something

    $.ajax(...); // ajax call
});

checkifPresentInClosedProjLib(function(flgCl) {
    if (flgCl === "closed_found")
        // do something

    $.ajax(...); // ajax call
});

3 个答案:

答案 0 :(得分:2)

只需使用promises来处理异步事件。您需要修改checkifPresentInActiveProjLib以返回承诺,在这种情况下,您的承诺为$.ajax(...);,因此您执行return $.ajax(...);,然后只需按以下方式调用下一个函数:

 checkifPresentInActiveProjLib(...)
.then(function() { 
      checkifPresentInClosedProjLib(args)
})

答案 1 :(得分:2)

您可以使用javascript Promise对象

  function  checkifPresentInActiveProjLib(flgAc) {
    if (flgAc === "active_found")
        alert('active_found');
};

function checkifPresentInClosedProjLib(flgCl) {
    if (flgCl === "closed_found")
        alert('closed_found');
};

function makeAjaxCall(){
   var promiseObj = new Promise(function(resolve, reject){
         resolve(checkifPresentInActiveProjLib());
   });
 return promiseObj;
}

 makeAjaxCall().then(checkifPresentInClosedProjLib());

答案 2 :(得分:0)

您在两个函数中都有异步ajax调用。如果要在第一个完成后调用第二个,则需要等待第一个函数完成。

你可以通过调用第一个函数中ajax函数部分的响应部分中的第二个函数来做到这一点。

$sw.WriteLine($line.replace().replace().replace())

或者您可以使用承诺:

checkifPresentInActiveProjLib(function(flgAc) {
    if (flgAc === "active_found")
        // do something

    $.ajax(...).done(function( data ) {
    // call second function here
  }););
});

然后将函数调用为:

checkifPresentInActiveProjLib(function (flgAc) {
    return new Promise(function (resolve, reject) {
        if (flgAc === 'active_found')
        // do something
        $.ajax(...)
                .done(function (data) {
                  if (data) resolve(data);
                })
                .fail(function (err) {
                  reject(err);
                });
    });
});