gpt4 book ai didi

javascript - $q.resolve() 与 deferred.resolve() 之间的区别 - AngularJS

转载 作者:行者123 更新时间:2023-12-01 02:58:55 27 4
gpt4 key购买 nike

我需要从 $http 调用中返回一个 promise 中的自定义响应,以便我可以链接更多调用。我有两个可用的实现。有人可以解释两者之间的区别,并争论其中一个更好吗?

在 fooService.js

实现#1

function foo() {
var deferred = $q.defer();
return $http.get('some-http-url')
.then(function(response) {
var data = response.data.Data;
// Some manipulation on data
deferred.resolve(data);
return deferred.promise;
});
}

实现 #2

function foo() {
return $http.get('some-http-url')
.then(function(response) {
var data = response.data.Data;
// Some manipulation on data
return $q.resolve(data);
});
}

然后在 FooController.js

fooService.foo().then(function(response) {
// Do something
});

附注欢迎一些可以让我更好理解的链接。


****************2017 年 10 月 4 日更新**** **********

如果我像这样修改我的函数 foo()

实现#1

function foo() {
var deferred = $q.defer();
if(/*some condition*/) {
deferred.resolve('data');
return deferred.promise;
}
else {
deferred.reject('error');
return deferred.promise;
}
}

实现 #2

function foo() {
if(/*some condition*/)
return $q.resolve('data');
else
return $q.reject('error');
}

哪种方式是首选?

最佳答案

您不需要$q在这里,因为$http已经returns a promise 。只需在 .then() 中返回数据,它将可用于链中的下一个 .then():

function foo() {
return $http.get('some-http-url')
.then(function(response) {
return response.data.Data;
});
}

您执行实现的方式称为 deferred antipattern ,更多信息见this answer .

关于javascript - $q.resolve() 与 deferred.resolve() 之间的区别 - AngularJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46560170/

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