promise - 承诺对象总是需要回调函数吗?
问题描述
我有一个要求,我需要在 Angular 1 中创建一个服务,并使用可以在控制器中访问的 API 调用加载数据。我之前尝试过使用 $http 服务进行 API 调用并将数据分配给变量/对象。然后我注入服务并将变量/对象分配给控制器范围变量/对象。
我在控制器事件循环中观察到的与服务事件循环不同,控制器范围变量/对象仍未定义。后来我通过从服务返回一个promise,并在控制器中调用promise,得到了一个解决方案,但是我是promise的新手,当我调用promise时无法完全吸收,我必须将函数传递为我认为这是 $http API 调用的回调,但我不确定它是如何在后台工作的。有人可以解释一下吗?
//service code
this.getuserimages = function(uname) {
console.log("Username in UserImage Service: " + uname);
var promise = $http.get('/api/images/' + uname).then(function(response) {
this.userimages = response.data;
return this.userimages;
});
return promise;
}
// controller code
var userimagespromise = userImageService.getuserimages($routeParams.username);
userimagespromise.then(function(data) {
$scope.userimages = data;
解决方案
您的代码是一个Promise 链。
我以一种更清晰的方式重写了您的代码,但含义完全相同:
$http.get('/api/images/' + uname)
.then(function(response) {
this.userimages = response.data;
return this.userimages;
})
.then(function(images) {
$scope.userimages = images;
});
您可以通过以下方式阅读此流程:
- 请给我用户图片
- 然后,我们将它们可用(=> 从 get 返回并传递给then函数),将它们保存在变量中并将它们返回到链的下一个元素
- 然后,我们将它们可用(=> 从先前的承诺返回),将它们设置在$scope
请注意,整个流程是异步的,因为每个 Promise 都是“代表异步操作最终完成或失败的对象”。
您可以在Promise 文档中找到更多信息。
推荐阅读
- javascript - 是否可以在 discord.js 中为某些用户提供自定义嵌入颜色?
- android-studio - Android Studio 4.1 更新出现内部错误且无法启动
- javascript - 在 JavaScript 中,如果一次发送一个,则添加到数组
- typescript - 如何使用打字稿相对/绝对路径
- java - ArrayList Contains with Object 总是返回 false
- javascript - mongodb 组总和子详细信息
- javascript - 为 wordpress 主题调试 Jquery
- xamarin - 如何使用命令中的 mvvm 属性将选择器值保存到 web api?
- python - Python 默认记录 exc_info
- python - scrapy如何正确导出到json