Javascript 使用Ajax承诺/延迟

Javascript 使用Ajax承诺/延迟,javascript,jquery,ajax,promise,deferred,Javascript,Jquery,Ajax,Promise,Deferred,我正在尝试使用下面的代码获得一个Ajax承诺。因为我的函数在启动实际的ajax调用之前进行了另一个ajax调用,为了获取authKey,实际调用中的承诺(应该返回)是空的,&我不能对它使用.then(),因为我认为我没有从中得到任何回报。我不知道为什么 我做错了什么?还有别的办法吗。我调用getAjaxPromise(),如下所述,但返回null: getAjaxPromise(myUrl、true、myType、myContentType、mySuccessFunction、myFailur

我正在尝试使用下面的代码获得一个
Ajax承诺。因为我的函数在启动实际的ajax调用之前进行了另一个ajax调用,为了获取
authKey
,实际调用中的承诺(应该返回)是空的,&我不能对它使用
.then()
,因为我认为我没有从中得到任何回报。我不知道为什么

我做错了什么?还有别的办法吗。我调用getAjaxPromise(),如下所述,但返回null:

getAjaxPromise(myUrl、true、myType、myContentType、mySuccessFunction、myFailureFunction、,
我的数据(对)
.then(函数(数据)/.then()给出未定义的null错误
{
//处理从实际Ajax调用返回的数据。

});您忘记返回getTokenPromiseFromServer
如果isSecureCall为true,则函数返回null

self.getAjaxPromise=function(url、异步、类型、contentType、successCallback、,
errorCallback、data、isSecureCall)
{
如果(召回){
返回getTokenPromiseFromServer()。然后(函数(tokenData){
返回$.ajax({
发送前:功能(请求){
setRequestHeader(“authKey”,tokenData.key);
},
url:url,
异步:异步,
类型:类型,
contentType:contentType,
success:successCallback,//success callback运行正常,则()不运行
error:errorCallback,//error callback运行正常,则()不运行
数据:JSON.stringify(数据)
});
});
}否则{//只需一个ajax调用
返回$.ajax({
发送前:功能(请求){
setRequestHeader(“authKey”、“匿名”);
},
url:url,
异步:异步,
类型:类型,
contentType:contentType,
成功:成功,
错误:errorCallback,
数据:JSON.stringify(数据)
});
});
}

};您忘记在if语句中返回承诺,您只在else上返回承诺,下面是固定代码:
self.getAjaxPromise=function(url、异步、类型、contentType、successCallback、,
errorCallback、data、isSecureCall){
如果(召回){
var tokenPromise=getTokenPromiseFromServer();//另一个Ajax调用从服务获取最新令牌
tokenPromise.then(函数(tokenData){
返回$.ajax({
发送前:功能(请求){
setRequestHeader(“authKey”,tokenData.key);
},
url:url,
异步:异步,
类型:类型,
contentType:contentType,
success:successCallback,//success callback运行正常,则()不运行
error:errorCallback,//error callback运行正常,则()不运行
数据:JSON.stringify(数据)
});
});
回报承诺;
}否则{//只需一个ajax调用
返回$.ajax({
发送前:功能(请求){
setRequestHeader(“authKey”、“匿名”);
},
url:url,
异步:异步,
类型:类型,
contentType:contentType,
成功:成功,
错误:errorCallback,
数据:JSON.stringify(数据)
});
});
}

};您忘了返回令牌 如果需要的话,你必须从第一个寄回

if (isSecureCall) {
    var tokenPromise = getTokenPromiseFromServer(); //Another Ajax call to get latest token from service

    // ...

    return tokenPromise;
  } 

在发布的代码中似乎有多个语法错误?您的查询版本是什么?我修改了代码以使其更加简化,让我检查一下,可能有一些父项遗留下来,我将修复它。实际上,没有语法错误-只是为了澄清,@Ali.MD jquery-1.11.1.minIts不是您的问题,但我建议您使用v2,或者如果您必须使用v1,请使用v1.5,因为它在ajax请求中得到了改进。谢谢!我认为tokenPromise的then()中的返回就足够了,但现在它是有意义的,只有在服务器响应之后才会执行,而不是立即执行。谢谢