我应该如何嵌套这些异步调用?

时间:2019-01-18 11:35:37

标签: javascript jquery

在我的代码中,我有一个函数,该函数取决于对API端点的异步调用的结果。为了使函数正常执行,它需要等待调用结果。因此,我已经阅读了async个调用,并且从另一个Stack Overflow问题中了解到,您应该利用回调函数来启用正确的执行。

下面的代码是我试图利用回调使我的函数成功运行的尝试,但它不起作用,此刻我认为调用已被弄乱了。

我不确定如何构造此代码,但是我首先需要getInstructionType()调用以返回其值,然后需要GetValidationResult()调用以返回其值,然后是{{ 1}}函数需要执行。

setValidationRowColor()

2 个答案:

答案 0 :(得分:1)

您可以将参数添加到可用作回调的函数中。然后,您可以在AJAX请求完成时调用它们,如下所示:

getInstructionType(applicationNumber, function(result) {
  getInstructionValidationResult(applicationNumber, function(type) {
    setValidationRowColor(result);
  });
});

function getInstructionValidationResult(applicationNumber, callback) {
  $.get(/*-snip-*/, function(data) {
    // some custom logic to work with the response here...
    callback && callback(data);
  });
}

function getInstructionType(applicationNumber, callback) {
  $.get(/*-snip-*/, function(data) {
    // some custom logic to work with the response here...
    callback && callback(data);
  });
}

答案 1 :(得分:1)

回调(完全有效)的替代方法是promises-实际上只是另一种形式或回调。假设您使用的是jQuery的$ .get,那么您已经在使用Promises:

getInstructionType(applicationNumber, function(result) {
  return getInstructionValidationResult(applicationNumber)
    .then(function() {
      setValidationRowColor(result)
    })
});

function getInstructionValidationResult(applicationNumber) {
  var url = //-snip-;
  return $.get(url)
}

function getInstructionType(applicationNumber) {
  var url = //-snip-;
  return $.get(url)
}

请注意,我所做的只是return $.get,并添加了一个.then,它可以在getInstructionType内接受您的回调