angularjs - 在服务中调用承诺后无法在我的控制器中获取值
问题描述
我有一个在服务中调用函数的控制器。这反过来又在同一个服务中调用了一个 promise 函数。
问题是我无法在控制器中获取返回值。
控制器:
function mainFunctionInControlelr() {
some code here...
vm.evtHTTPFactory.getData() // calling the service
.then(function(response) {
console.log("the returned value is " + response.myReturned );
});
}
服务:
factory.getData = function(parm) {
return factory.getABC(parm); // calling another method in the same service
};
factory.getABC = function(parm) {
return $q(function(resolve, reject) {
$http.get(PltConfig.APIPath + '/v1/............', {
params: { inputParm: parm }
})
.success(function (response) {
resolve(response.data.myReturned);
return;
} )
});
};
问题是服务内部的 getData 正在调用服务内部的 getABC。在这个过程中丢失了一些东西。我需要在控制器中有“myReturned”。
我需要在 getData (在服务中)中放入什么才能使事情正常进行?
多谢。
解决方案
我会使用异步等待......像这样:
在您的函数 getData 中:
factory.getData = async function(parm) {
var data = await factory.getABC(parm);
return data;
};
在您的功能控制器中:
async vm.evtHTTPFactory.getData() {
var myResp = await vm.evtHTTPFactory.getData()
console.log(myResp)}
这里的一个例子:https ://jsfiddle.net/hernangiraldo89/frv4L2jh/4/
我希望它对你有帮助!
推荐阅读
- python - 需要一次读取 10 个 url 以加快 python 中的抓取速度。存储在 csv 文件中的 url
- elixir - 对 Elixir 中运行时和库的困惑
- angular - angular : 上传视频、音频、doc文件
- html - 搜索栏不接受关闭按钮
- firebase - 如何在列表视图中显示异步函数的结果
- r - 如何将整个 data.frame 转换为数字
- hadoop - 用于平面数据结构的 Apache Parquet
- javascript - 从分钟和小时或天和小时的字符串计算分钟
- angular - 正确访问可观察值或传递引用
- java - 如何在材料设计世界中创建主/细节