angularjs - Angular Promise 有条件的
问题描述
单击按钮时,我的 Angular v1.x 指令会调用一个函数,并根据输入设置一些变量:
$scope.offerRespond = function() {
if (offer.i.offerResponse == 1) {
// set some variables
}
else if (offer.i.offerResponse == 0) {
$http({method: 'GET', url: frontbaseurl+'/offer_types/' + id + '.json'})
.then(function successCallback(response) {
$scope.reason = response.data.data.name;
}, function errorCallback() {
$scope.reason = "Unknown";
}
);
$http.post(frontbaseurl+'/purchases.json', JSON.stringify(dataObj))
.then(function(response){
// continue....
}
}
可以看出,如果 offerResponse == 0,我会发出 GET 请求。这似乎很冒险,因为在收到请求的响应之前代码会继续执行。我知道方法是使用“承诺”,但是如果可能无法发出 GET 请求,这在这种情况下如何应用?
我看到的问题是,如果我添加一个承诺并且 offerResponse == 1,则该承诺无法实现,因为不会发出 GET 请求。
请问有什么建议吗?
解决方案
我不得不在我们的 Angular 1.x 应用程序中使用 Typescript 做类似的事情,如下所示:
public myFunc = async (id): Promise<void> => {
return new Promise<void>(async (resolve, reject) => {
if (this.offer.i.offerResponse === 1) {
// set some variables
resolve();
}
else if (this.offer.i.offerResponse === 0) {
try {
const response = await services.getOfferTypes(id);
this.reason = response.data.data.name;
resolve();
} catch (errorResponse) {
this.reason = "Unknown";
reject();
}
}
});
}
请注意,我将您的 http 请求“封装”在一个服务函数中。我喜欢将 api 调用分离到它们自己的服务中,以保持内容简洁易读。这段代码未经测试,但如果我没记错的话它应该像这样工作。
推荐阅读
- google-apps-script - 从 Google 日历第 3 方会议身份验证 URL 返回数据?
- angular - 赛普拉斯测试中的 Angular getHarness 不起作用
- python - 如何访问“appdata”文件夹?
- javascript - Node.js 错误错误:找不到模块“猫鼬”
- python-3.x - 从 vgg16 预测 train_generator 以比较真实值与预测值
- javascript - 在 Heroku 中,我试图托管一个不和谐的机器人,但它一直失败
- excel - 从活动工作表中选择时禁用工作表名称 - Excel
- javascript - Fullcalendar 自定义视图 js eventDidMount
- asp.net - 使用 MS Access 数据库发布 asp.net
- javascript - 通过 mocha.run() 运行测试时,如何将 es6 模块与 mocha 一起使用?