从另一个函数调用Angularjs函数,然后等待它的响应
Angularjs function call from another function and wait its response
我已经寻找了一个解决方案,但我没有找到这样的东西。
我正在使用angular,我想在另一个函数中调用一个函数,并等待它的响应。
第二个函数是:
self.changeProvider = function() {
var contexec = false;
if (!checkIsFit()) {
contexec = true;
} else {
contexec = false;
}
if (contexec) {
var modalOptions = {
closeButtonText: $translate.instant('closeButtonText'),
actionButtonText: $translate.instant('ok'),
headerText: $translate.instant('changeProvidertitle'),
bodyTemplate: '../themes/default/src/app/shoppingCart/changeProvider/changeProvider.tpl.html',
margin: true
};
var modalDefaults = {
backdrop: 'static',
templateUrl: '../themes/default/src/app/shoppingCart/changeProvider/changeProvider.tpl.html',
controller: 'ChangeProviderCtrl',
size: 'sm',
resolve: {
modalData: function() {
return {
data: $scope.arrayToChangeProvider
};
}
}
};
modalService.showModal(modalDefaults, modalOptions)
.then(function(result) {
//some stuff
});
}
};
另一个功能:
var checkIsFit = function() {
if ( $scope.cabstatus != 4 ) {
return false;
} else {
var modalOptions = {
closeButtonText: $translate.instant('closeButtonText'),
actionButtonText: $translate.instant('ok'),
headerText: $translate.instant('cabisfittedtitle'),
bodyTemplate: '../themes/default/src/app/shoppingCart/checkIsFit/checkIsFit.tpl.html',
margin: true
};
var modalDefaults = {
backdrop: 'static',
templateUrl: '../themes/default/src/app/shoppingCart/checkIsFit/checkIsFit.tpl.html',
controller: 'CheckIsFitCtrl',
size: 'sm',
resolve: {
modalData: function() {
return {
};
}
}
};
modalService.showModal(modalDefaults, modalOptions)
.then(function(result) {
if (result.msg === 'ok') {
var params = {
token: $scope.token,
fkidpedido: $scope.pendingOrderLineList[0].FK_IDPEDIDO,
userid : $scope.userid
};
shoppingCartService.postResetAgr(params, function() {
return true;
}, function() {
/*Notification.error({
message: $translate.instant('components.activity.actions.deleteActivityError')
});*/
});
return false;
} else {
return true;
}
});
}
};
问题是函数changeProvider
仍在执行,并首先打开模态来解决函数checkIsFit()
我想等checkIsFit
解决了再继续changeProvider
的功能我不能在changeProvider
中包含checkIsFit()
功能,因为我想在其他函数中使用checkIsFit()
。
任何帮助将不胜感激。
Thanks in advance
我相信您正在寻找的是延迟对象和承诺。查看$q:
的文档https://docs.angularjs.org/api/ng/service/美元q
我建议大家好好读读这篇文章,因为这对任何Javascript开发者来说都是一个非常重要和强大的概念。
本质上,延迟对象和承诺允许您运行异步进程并在进程完成时回调函数。
modalService.showmodal
方法返回一个promise。创建返回这些承诺的函数。
var modalPromise1Fn = function () {
var promise1 =
modalService.showModal(modalDefaults1, modalOptions2)
.then(function(result) {
//some stuff
});
return promise1;
};
var modalPromise2Fn = function () {
var promise2 =
modalService.showModal(modalDefaults2, modalOptions2)
.then(function(result) {
//some stuff
});
return promise2;
};
使用第一个承诺的.then
方法到链第二个承诺。
var derivedPromise =
modalPromise1Fn().then( function() {
var promise2 = modalPromise2Fn();
//return to chain the second promise
return promise2;
});
From the Docs:
链接承诺因为调用承诺的
.then
方法会返回一个新的派生承诺,所以很容易创建一个承诺链。可以创建任何长度的链,并且由于一个承诺可以与另一个承诺一起解析(这会进一步推迟它的解析),因此可以在链中的任何点暂停/延迟承诺的解析。这使得实现强大的api成为可能。
——AngularJS $q Service API Reference——链接承诺
相关文章:
- 在单击事件时更新主干模型,并在更改位置之前等待响应
- 如何使用 Ajax 一次仅按顺序发布数组的 1 个值,并在继续之前等待响应
- 如何在 $.post jQuery 中等待响应
- 如何在 ajax 中调用函数到 php 函数并等待响应
- Ajax在返回值之前等待响应
- 为什么这个呼叫在继续之前没有等待响应
- 如何在最里面的循环等待响应时延迟嵌套迭代
- 如何使用async.series来等待响应
- Angularjs$http等待响应
- 当使用带有单个套接字的httpAgent时,它会在发送下一个请求之前等待响应吗?
- Node.js:服务器等待响应和超时
- Google Maps放置API——如何让代码等待响应
- iMacros可以单击按钮而不等待响应吗?
- AngularJS控制器等待响应(或设置回调)
- Chrome扩展运行时.Sendmessage等待响应
- Node.js (node-pg)或C (libpq) -执行PostgreSQL请求而不等待响应
- 在JavaScript中异步加载配置,如何最好等待响应
- 当我们进行ajax调用并等待响应并阻塞页面时显示一个旋转器
- 运行jQuery函数.Ajax等待响应的时间足够长
- js:将记录保存到Ember.数据,等待响应后再显示