gpt4 book ai didi

javascript - 从 AngularJS 中自执行的 Promise 返回一个值

转载 作者:行者123 更新时间:2023-12-03 08:45:24 25 4
gpt4 key购买 nike

我正在构建一个相当复杂的服务,其中包含许多模型和功能。部分服务如下所示:

// Sports model
var sports = {
list: function () {

// Create our deferred promise
var deferred = $q.defer();

// Get our categories
moltin.categories.list(0, 0).then(function (response) {

// Create our list
list = [];

// Loop 6 times
for (var i = 0; i < 6; i++) {

// Get our column index
var colIndex = i + 1;

// Return our spliced array
list.push(response.splice(0, 7));
}

// Resolve our list
deferred.resolve(list);
});

// Return our promise
return deferred.promise;
}()
};

然后将其分配给服务并像这样返回:

var service = {
sports: sports
}

return service;

现在,如您所见,我正在调用一个 API(moltin 是另一个返回 promise 的服务)。在我的 Controller 中我想这样做:

self.list = service.sports.list

因为该方法是自动执行的,所以我希望实际上有一个类别列表,但我只是得到了 promise 。有谁知道我如何获得列表而不必这样做:

service.sports.list().then(function (response) {
self.list = response;
});

最佳答案

不,该方法是异步的,因此如果不链接到 Promise 就无法访问它。

顺便说一句,您的代码中也有一些反模式。您不应该创建一个新的 deferred 并返回它 - 您应该只从内部回调返回 list 并直接从方法返回:

var sports = {
list: function () {

// Get our categories
return moltin.categories.list(0, 0).then(function (response) {

// Create our list
list = [];

// Loop 6 times
for (var i = 0; i < 6; i++) {

// Get our column index
var colIndex = i + 1;

// Return our spliced array
list.push(response.splice(0, 7));
}

return list;
});

}()
};

所有其他代码保持不变。

关于javascript - 从 AngularJS 中自执行的 Promise 返回一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32910305/

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