我有一个场景,其中一个请求的响应将在响应头中包含一个令牌,我需要将此令牌与随后的任何其他后续请求相关联。 有什么建议吗?
不能使用promise,因为请求的顺序没有定义,可以是任意随机顺序。
以下是我的$ http邮政编码:
var appURL = '';
appURL = serverURL + $backendApis[apiName] + "/?_s=" + $http.defaults.headers.common['Session-Alias'];
return $http.post(appURL, postParams).success(function(response, status, headers, config) {
$http.defaults.headers.common['Custom-Access-Token'] = headers('Custom-Access-Token');
if (response.errorCode && response.errorCode != "8233" && response.errorCode != "506717") {
alert("Sorry, we are not able to provide you a quotation at this stage as we are facing a technical issue. Please get back after sometime to issue a quotation or call us. Sorry for the inconvenience");
}
});
我只需要等待我的下一个请求开始,直到我没有得到第一个请求。 尝试过使用ajax并将async设置为false,但不好的是它会冻结整个U.I的chrome,给用户带来不好的体验。
答案 0 :(得分:0)
这通常是一个糟糕的想法:通过" design"来同步它的异步。它的某些东西会让你的代码闻起来(如果其中一个端点是不可缓存的,它会挂起你的应用程序)。
但是如果出于某种原因你需要这样做,你仍然需要使用promises,但采用递归方法:
var promises = urls(); //all your urls in an array
function doCall(){
var appUrl = promises.pop();
$http.post(appURL, postParams).success(function(response, status, headers, config) {
$http.defaults.headers.common['Custom-Access-Token'] = headers('Custom-Access-Token');
if (response.errorCode && response.errorCode != "8233" && response.errorCode != "506717") {
alert("Sorry, we are not able to provide you a quotation at this stage as we are facing a technical issue. Please get back after sometime to issue a quotation or call us. Sorry for the inconvenience");
}
}).then(function(){
if(!promises.length) //no urls left, kill the process.
return;
doCalls(); //go ahead for the next one
});
}
通过这种方式,您可以同步$ http请求。