我在StackOverflow上看到了答案,有人建议为AngularJS服务提供回调函数。
app.controller('tokenCtrl', function($scope, tokenService) {
tokenService.getTokens(function callbackFn(tokens) {
$scope.tokens = tokens;
});
});
app.factory('tokenService', function($http) {
var getTokens = function(callbackFn) {
$http.get('/api/tokens').then (function onFulfilled(response) {
callbackFn(response.data);
});
};
return {
getTokens: getTokens
};
});
在我看来,这是一种反模式。该$http
服务返回promise,让.then
方法执行回调函数感觉像是对控件的不良转换。
一个人如何 重因子 这样和代码如何解释为什么原始的方式是 不是一个好主意?
该代码可以按如下方式重构:
app.controller('tokenCtrl', function($scope, tokenService) {
tokenService.getTokens.then ( callbackFn(tokens) {
$scope.tokens = tokens;
});
});
app.factory('tokenService', function($http) {
var getTokens = function() {
//return promise
return $http.get('/api/tokens').then (function onFulfilled(response) {
//return tokens
return response.data;
}
);
};
return {
getTokens: getTokens
};
});
通过使服务返回承诺,并使用承诺的.then
方法,可以实现相同的功能,并具有以下好处:
Promise可以保存并用于 链接 。
可以保存承诺并用于避免重复同一$http
呼叫。
错误信息将保留并可以通过该.catch
方法检索。
承诺可以转发给其他客户。
我正在尝试使用Promise API编写重新连接到超时数据库的代码。 我最后做的是把连接DB的promise包装成一个promise,但我不确定这是否是最好的方式。我想可能有一种方法可以使用最初的promise,从尝试连接到数据库,但我无法找到它。 我认为没有setTimeout块是可能的,但我无法解决它。
这个答案几乎描述了问题的前半部分。 上面写着: 看过“四人帮”的定义后,我不相信这有什么真正的区别。(为方便起见包括在内) 装饰器:允许对对象进行动态包装,以便修改它们现有的职责和行为 责任链:通过将接收对象链接在一起,使多个对象有机会处理请求 维基百科对它们做了一些补充,但有些是武断的。 > 装饰器通常作为链表实现。但我认为这太低了,不能被认为是模式的“一部分”。 责任链只处理数据,如果这是他们
我正在学习亚当·简斯的合唱团教程。 数据是用这个代码块加载的 而准备就绪被定义为 我把这个序列理解为 首先-创建一个名为promises的数组,其中第一项是来自此链接的已解析json,第二项是来自该文件的id/值对的映射 第二,获取promise变量中的所有promise,如果成功,则触发函数ready,如果失败,则不执行任何操作 如果这是对的,那么相对于这样的东西有什么优势呢?我用伪代码写这个因
我最近一直在摆弄api,并注意到一些有点古怪的东西。 返回一个对象。http://jsbin.com/wofulo/2/edit?js输出 但是,如果写为: 这里是一个标准的,您可以访问title属性 所以我的问题是:为什么在对象文本中返回一个promise,但是如果刚刚返回,则返回值?
问题内容: 给定 为什么 在链接到电话吗? 问题答案: 因为没有ed 或其他值从链接到构造函数。 请注意,将返回一个新对象。 解决方案是使用value或from 的值或其他函数调用。
问题内容: 在Parallel Python中,它在 Submit 函数中有一个叫 回调 (documentation)的东西,但是似乎并不能很好地解释它。我几天前已在他们的论坛上发布了消息,但没有收到任何回复。有人可以解释什么是回调及其用途吗? 问题答案: 回调是API使用者提供的功能,API可以转回并调用(回调您)。如果我设置了博士的约会,我可以给他们我的电话号码,这样他们就可以在前一天给我打