gpt4 book ai didi

javascript - 如何等待Callback函数的返回?

转载 作者:行者123 更新时间:2023-11-27 23:38:42 26 4
gpt4 key购买 nike

如何正确实现该用例:客户确认操作后,我想显示等待屏幕,直到回调函数完全执行...

我已完成以下操作,但在调用 srv.hideLoadingScreen() 之后执行 REST 调用...:-/

对话服务:

srv.onApprove = function(callback){
srv.displayLoadingScreen();
callback();
srv.hideLoadingScreen();
};

Controller :

ctrl.showConfirmModal = function(){
//...
if(approved){
DialogService.onApprove(function(){
ctrl.performAction();
});
}
};

ctrl.performAction = function(){
console.log('performAction');
if(angular.isDefined(ctrl.selectedNumberList)){
var numberList = {
nbList: ctrl.selectedNumberList
};
MyService.launch(numberList, function(response){ // REST call
console.log('call ok');
}, function(error){
console.log('error');
});
}
};



更新:目前我选择了这个解决方案,可以避免 回调回调:关闭 ctr.perfomAction()

中的等待面板
MyService.launch(numberList, function(response){ // REST call
console.log('call ok');
DialogService.hideLoadingScreen();
}, function(error){
console.log('error');
DialogService.hideLoadingScreen();
});

最佳答案

您可以使用 the $http service返回一个 Promise。

异步操作只有在完成且调用堆栈清空后才会返回。由于我们会在返回它们之前留下范围,因此您可以使用 Promise 来确保您取回值。

app.service('MyService', function($http) {
this.launch = function launch() {
return $http({ method: 'GET', url: '/endpoint' });
};
}

app.controller('MyCtrl', function(MyService) {
MyService.launch()
.then(function(response) {

});
});

使用 $q 服务也可以实现同样的效果,为任何类型的异步调用返回一个 Promise。

关于javascript - 如何等待Callback函数的返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33895628/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com