【发布时间】:2014-12-26 13:10:10
【问题描述】:
我正在使用不返回承诺的 Trello API。它有回调函数。我想给它写一个包装器,它会等到回调被执行并返回数据。 我写了下面的代码:
function getLoggedInMember() {
var deferred = $q.defer();
Trello.members.get("me", deferred.resolve);
deferred.promise.then(function (user) {
return user;
});
}
此功能在我的会员服务中。下面是我的路由配置:
angular.module('trelloDashboard').config(['$routeProvider', function ($routeProvider) {
$routeProvider
.when('/', {
templateUrl: 'Views/Login.html',
controller: 'LoginController'
})
.when('/Dashboard', {
templateUrl: 'Views/Dashboard.html',
controller: 'DashboardController',
resolve: {
user: function (MemberService) {
return MemberService.getLoggedInMember();
}
}
});}]);
这显然行不通。有没有办法实现我在这里尝试做的事情? 谢谢。
【问题讨论】:
-
是的,问题是你没有从函数中返回任何东西。你需要在你的函数中
return deferred;。 -
另外,Angular 1.3 deferreds 没有被绑定,所以如果你使用的是 1.3 而不是 1.2,你必须使用
get("me", function(val){ deferred.resolve(val); })获取上下文,而不仅仅是deferred.resolve -
太棒了!那行得通!这是最后一个函数: function getLoggedInMember() { var deferred = $q.defer(); Trello.members.get("我", function(user){ deferred.resolve(user); });返回 deferred.promise; }。路由配置没有变化。
-
很高兴能帮上忙,最好先参考规范问题,其中提到了代码中的问题以及如何解决问题。此外,您可能需要考虑使用 Promise 构造函数(1.3 及更高版本)来更好地处理错误。
标签: angularjs promise angular-routing trello