gpt4 book ai didi

javascript - 返回 promise 后访问工厂服务

转载 作者:行者123 更新时间:2023-11-28 06:02:34 25 4
gpt4 key购买 nike

我正在构建一个 AngularJS 应用程序,并构建了执行 ajax 请求的服务。通过 promise ,一旦满足这些请求,它们就会返回以获取我的 View 所需的数据。

使用 $.Deferred().then() 我可以等到我的请求完成后再在 Controller 上执行进一步的代码,但是我有一个关于范围界定的问题。

我想执行第二个请求,该请求需要使用从第一个请求收集的一些数据,因此必须等待它的 promise 得到履行,然后才能再次调用该服务。

问题是我无法在 Promise .then() 函数中访问我的工厂服务,尽管我已将其正确注入(inject)到 Controller 中。如何使工厂在此 promise 返回中可用,以便我可以以这种方式第二次调用它?

我的 View Controller 功能:

function getCategories() {
datacontext.getCategories()
.then(function (data) {
if (data) {
vm.categories = data;
categoriesPromise.resolve(data);
} else {
throw new Error('Error obtaining data.');
}
})
.catch(function (error) {
common.logger.log('error', 'Error obtaining the categories.', error, controllerId);
})
}

function getUsers() {

// Wait until the categories are loaded
categoriesPromise.then(function (categories) {
// I want to use dataContext again here
})
}

我想在 getUsers() 内的categoriesPromise.then() 中再次使用 getCategories 中使用的数据上下文。

最佳答案

以这种方式创建你的工厂:

 .factory("MyFactory", ['$q', function ($q) {
return {
get: function (_tagName) {
var deferred = $q.defer();
$http.get(_tagName, function (err, result) {
if (err) {
return deferred.reject(err);
} else if (result) {
return deferred.resolve(result);
}
});
return deferred.promise;
}
}
}])

然后将其注入(inject)到您的 Controller 中:

.controller('myCtrl', ['$scope','MyFactory',
function ($scope, MyFactory) {

$scope,getData = function(){

var success=function(data){
console.log("Data return successfully", data);
},error = function(err){
console.log("something went wrong", err)
}

MyFactory.get("tagName").then(success,error)
};
}]);

希望这对您有帮助。

关于javascript - 返回 promise 后访问工厂服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37158434/

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