如何在js中等待http调用结束
How to wait for an http call to get over in js?
我正在使用$http对用户进行http调用。我有一个成功方法,它在从服务器获得成功响应时被调用。我的问题是,我如何等待http调用结束(即,在调用完成之前不执行调用后编写的内容)?
main(){
var val = myFunction();
console.log("---after receiving response---");
return val;
}
myFunction(){
var temp;
fnResource.get(function(data){
{
console.log("---on success---");
temp = data;
});
return temp;
}
在这种情况下,我的代码会先打印"---在收到响应后---",然后打印"---关于成功---",但我打算始终先打印"----关于成功----"。
更新:已经更新了片段来进一步解释我的场景。
只需将代码放在$http.get(...)
之后的一个单独函数中,并从success
回调中调用它。
您的困惑可能源于AJAX调用是非阻塞的事实(如在异步中,如在A同步JavascriptAndXML中)。您可以在一行中触发多个AJAX请求,其中一个请求在检索到其他请求之前不会停止发送。考虑一下:
$http.get('/route1').success(function() { console.log('route 1 success'); });
$http.get('/route2').success(function() { console.log('route 2 success'); });
$http.get('/route3').success(function() { console.log('route 3 success'); });
对/route2
和/route3
的AJAX调用不必等待第一个AJAX调用完成才能发送。此外,在这种情况下,您无法保证他们将以何种顺序返回,原因多种多样,完全超出了本问题的范围。重点是,多次运行上面的代码可能会导致如下日志:
route 1 success
route 2 success
route 3 success
但同样有可能是这样的:
route 2 success
route 1 success
route 3 success
你无法控制它。但是,你可以这样做来强制HTTP请求按特定顺序返回:
$http.get('/route1').success(function() {
$http.get('/route2').success(function() {
$http.get('/route3').success(function() {
console.log('all requests complete');
});
});
});
上面对route1
的AJAX请求将阻止对route2
的请求,直到它返回
尝试使用always
myFunction(){
$http.get("..api/endpoint/").
success(function(data){
console.log("---on success---");
})
.always(function() {
console.log("---after receiving response---");
});
}
相关文章:
- Meteor HTTP调用出现问题
- 如何将控制器http调用转换为接受参数的服务/工厂模式
- 正在等待HTTP调用从函数返回结果
- 如何在 http 调用成功时禁用锚标记
- 角度 2:使用一个 http 调用的结果来执行另一个调用
- 如何使用在 Javascript 中对 API 进行 HTTP 调用
- 如果statusCode不是200,那么从http调用返回什么类型的错误对象
- node.js:在for循环中进行http调用
- 如何在nodejs中的async.each中进行同步http调用
- 如何在node.js中使用promise进行同步http调用
- 当调用成功时,如何从angular 2中的http调用返回数据
- 循环AngularJS$http调用-TypeError:对象不是函数
- 我正在使用 $scope.$apply 在 http 调用后更新对象数组.谁能告诉我正确的方法
- Meteor HTTP 调用不断加载图像
- 进行多个 http 调用并使用承诺合并结果
- $http调用似乎产生了无限$digest循环
- AngularJS:http 链调用问题和 NodeJS:在多个 http 调用中使用变量的问题
- 使用 $watch 在属性更改时执行$http调用的角度服务
- AngularJS:如何使对象中的对象调用后续的http调用
- 如何在 ag-grid 中从 http 调用加载动态列和行(列和记录都应该是动态的)