【问题标题】:How do i call a function first and then the second in javascript我如何在javascript中先调用一个函数,然后再调用第二个函数
【发布时间】:2017-12-21 03:59:18
【问题描述】:

我想先调用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
});

【问题讨论】:

  • await checkifPresentInActiveProjLib() 可以吗?
  • 在您的示例中,它们一个接一个地被调用。你的意思是在第一个 ajax 调用之后?
  • yes.. 这两个函数(checkifPresentInActiveProjLib 和 checkifPresentInClosedProjLib)存在于按钮单击后调用的函数中。我希望在 checkifPresentInActiveProjLib() 的 ajax 调用完成之后,它应该调用 checkifPresentInClosedProjLib()
  • 你可以使用 async await 来实现这个

标签: javascript jquery ajax callback


【解决方案1】:

你可以使用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());

【讨论】:

  • @programtreasures- 这个解决方案是否完整。我们不解决并拒绝承诺吗?
  • 我收到错误:checkifPresentInActiveProjLib 未定义且 checkifPresentInClosedProjLib 未定义
  • 请立即检查,并在适当的函数中调用您的 ajax
  • 能详细解释一下吗?
  • 语法有问题。这段代码就像一个魅力。非常感谢你的帮助。非常感谢..:-)
【解决方案2】:

只需使用 Promise 来处理异步事物。你需要修改你的checkifPresentInActiveProjLib来返回promise,在这种情况下你的promise是$.ajax(...);所以你做return $.ajax(...);然后简单地以下面的方式调用下一个函数:

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

【讨论】:

    【解决方案3】:

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

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

    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);
                    });
        });
    });
    

    然后调用函数为:

    checkifPresentInActiveProjLib(...).then(data => checkifPresentInClosedProjLib(...)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多