- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在编写一个依赖于 promises 的 angularjs 应用程序,虽然它正在运行,但我想知道我是否可以做得更好。
在代码的开头,我创建了一个用于获取一些数据的 promise 。完成后,我想运行几个都使用这些数据的函数。这些功能附加在应用程序的不相关部分,所以我不知道它们附加到 promise 的顺序。它们也不需要按顺序完成。
app.service("Fetch", function ($q){
return function() {
var def = $q.defer();
somelibrary.asynccall(function(error, data){ //callback
if (error) def.reject(error);
else def.resolve(data);
});
return def.promise;
};
});
app.controller("ctrl", function ($scope, Fetch) {
var prom = Fetch();
//somewhere:
prom.then(function(data){$scope.var1 = data["VAR1"];});
//somewhere else:
prom.then(function(data){$scope.var2 = data["VAR2"]});
});
这里的主要缺点是后面的 then
只在前面的完成时才执行,这在这里不是必需的。
此外,我需要在每个 function(data){...}
中添加 return data
,否则下面的 then()
没有可用的数据
。
有没有更适合这种情况的另一种方法?
编辑:如@jfriend00 所述,我错了;事实上,一旦 promise 成功解决,这两个函数就会并行运行,并且它们没有链接在一起,因此不会相互依赖。感谢您的帮助
最佳答案
将我的评论变成答案,因为它似乎解决了问题:
使用您的模式,当 promise 得到解决时,对同一个 promise 的两个 .then()
调用将一个接一个地被调用。第二个 .then()
只与原始 promise 有关,与第一个 .then()
上发生的事情无关。
这些没有链接,所以第二个 .then()
不依赖于第一个 .then()
返回的内容,并且两者将传递相同的数据.它们只是同一个 promise 的多个观察者,有点像两个事件处理程序监听同一个事件。
同一个 promise 上的两个 .then()
处理程序将按照它们附加到 promise 的顺序被调用,并且都将传递相同的数据。
请看这两个答案:
Is there a difference between promise.then.then vs promise.then; promise.then
Understanding javascript promises; stacks and chaining
有关链接的更多信息 p.then(...).then(...)
与分支 p.then(...); p.then(...)
promise 。
关于javascript - 单个 angularjs promise 上的多个 `.then()` - 全部使用_original_数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25345520/
我是一名优秀的程序员,十分优秀!