Javascript 在$.ajax成功后执行函数,而不直接将其放入回调中

Javascript 在$.ajax成功后执行函数,而不直接将其放入回调中,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有这个函数,代码的许多部分都调用它 function test() { $.ajax({ url : url, type : 'GET', success : { verifyID(); verifyName(); verifyBlah(); } }); } 我还有另外一个功能: addProductCart(productID); 在调用addProductCart()之前,我需要调用test函数,但是其他进程调

我有这个函数,代码的许多部分都调用它

function test() {
  $.ajax({
    url : url,
    type : 'GET',
    success : {
      verifyID();
      verifyName();
      verifyBlah();
    }
  });
}
我还有另外一个功能:

addProductCart(productID);
在调用
addProductCart()
之前,我需要调用test函数,但是其他进程调用test函数

我想这样做:

test() ---> if test ok (success) ----> addProductCart()
但我不能将我的函数(addProductCart)设置为成功测试函数,因为正如我所说的,许多其他进程调用测试函数

我该怎么做

使用承诺

测试中返回承诺,如下所示:

function test() {
  return $.ajax({ // <----- Notice the return statement here
    url : url,
    type : 'GET',
    success : {
      verifyID();
      verifyName();
      verifyBlah();
    }
  });
}
功能测试(){

返回$.ajax({//可能还需要查看其他代码,查看测试函数在做什么,以及调用它们的人在使用测试形式。这可以帮助您如何使测试函数返回布尔值,并在成功块中放入if语句?不确定我是否正确理解了问题。下面给出的解决方案如下所示可能是最好的,但您也可以修改
test()
接受指定要运行的其他回调的可选参数。从测试函数返回的承诺在哪里?$。ajax返回承诺。如果您阅读我的答案,我的测试函数与OP相同,但在此之前有一个返回语句。啊,这很好,因此您的函数保持不变,您返回ajax对象并然后根据您需要执行的操作不同地使用它。不,在下一行中,callbackI被test(someParam)抛出,这是无关的,对吗?函数不接受任何参数,不接受任何参数,但它会显示,如果您想传递参数,并更改相同的test()函数基于参数的行为有助于保持代码干燥并重用函数。
test().then(function(data, textStatus){
  //do thing 1
  addProductCart()
  // you can use data or textStatus returned by your ajax function here too!
});

test(someParam).then(function(data, textStatus){ // <--- You can even pass parameters to test function like here, and make it do different ajax call based on your param
  //do thing 2
});