gpt4 book ai didi

javascript - 单个 angularjs promise 上的多个 `.then()` - 全部使用_original_数据

转载 作者:IT王子 更新时间:2023-10-29 03:03:30 25 4
gpt4 key购买 nike

我正在编写一个依赖于 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com