角度 |创建链式承诺
AngularJS | Create chained promise
我想为我的服务提供商创建一个链式承诺:
this.$get = function($q, $window, $rootScope) {
var $facebook=$q.defer();
$rootScope.$on("fb.load", function(e, FB) {
$facebook.resolve(FB);
});
$facebook.api = function () {
var args=arguments;
args[args.length++] = function(response) {
$facebook.resolve(response);
};
$facebook.promise.then(function(FB) {
FB.api.apply(FB, args);
});
return $facebook.promise;
};
return $facebook;
};
比我呼唤承诺:$scope.user=$facebook.api("/me");
问题是,由于deferred
已经解决,因此不会等到api
方法解决它。
我怎样才能将它们链接起来,直到最后一个承诺将得到解决?
似乎您需要两个单独的 promise 对象:一个用于 fb.load 事件,另一个用于 API 调用的结果。
尝试追逐你的代码来阅读 -
this.$get = function($q, $window, $rootScope) {
var apiLoaded=$q.defer();
$rootScope.$on("fb.load", function(e, FB) {
apiLoaded.resolve(FB);
});
// You should reject the promise if facebook load fails.
$facebook.api = function () {
var resultDefer = $q.defer(),
args=arguments;
args[args.length++] = function(response) {
$rootScope.$apply(function() {
resultDefer.resolve(response);
// you should reject if the response is an error
});
};
return apiLoaded.promise.then(function(FB) {
FB.api.apply(FB, args);
return resultDefer.promise;
});
};
return $facebook;
};
另请注意,每当您从非角度代码调用 resolve() 时,都需要用 $rootScope.$apply() 包装它,否则承诺 'then' 处理程序不会被执行。祝你好运!
相关文章:
- 创建具有蓝鸟承诺的节流功能
- 如何创建角度承诺中捕获的错误
- 我可以在不创建延期的情况下报告Q承诺进度吗
- 同步异步创建的承诺
- 创建承诺回调
- 在猫鼬中创建承诺时,不会调用执行器
- 并行创建承诺
- 如何在 mpromise 中创建已兑现的承诺
- 在Selenium webdriver javascript绑定中创建“自定义”承诺
- 创建一个成功/错误的承诺,例如像ajax
- 我可以创建一个承诺来检查变量是否设置为角度吗?
- 如何在返回承诺的服务中创建 reset() 方法
- 为延迟请求处理创建承诺链
- 在承诺链中创建错误
- 基于当前平台创建承诺对象
- 角度 |创建链式承诺
- 在这种情况下,我将如何使用 javascript 创建一个承诺函数
- 使用BB承诺创建具有空闲端口的服务器
- 动态添加内容到Angular承诺创建的元素中
- 使用承诺创建用户和登录流