gpt4 book ai didi

javascript - 工厂数据来得太晚——Angular.js

转载 作者:可可西里 更新时间:2023-11-01 17:34:33 24 4
gpt4 key购买 nike

我之前有类似的代码可以工作,但出于某种原因,这一 block 不是。这是一个简单的想法;调用该函数,它会调用基于 $http 的工厂来获取数据并返回该数据的数组。首先是工厂:

app.factory('getSensors', ['data', function (data) {
return { get : function() {
data.get('sensors').then(function (results) {
var sensors = [];

for(var i = 0; i < results.sensors.length; i++) {
sensors.push({
'id' : Number(results.sensors[i][0]),
'name' : results.sensors[i][1],
'type' : results.sensors[i][2],
'device' : results.sensors[i][3],
'unit' : results.sensors[i][4],
'parent' : Number(results.sensors[i][5]),
'latitude' : Number(results.sensors[i][6]),
'longitude' : Number(results.sensors[i][7])
});
}

return sensors;
});
}
};
}]);

它使用以下data 服务:

app.factory('data', ['$http', function ($http) {
var serviceBase = '/api/';
var obj = {};

obj.get = function (q) {
return $http.get(serviceBase + q).then(function (results) {
return results.data;
});
};

return obj;
}]);

对于工厂调用,我尝试了 getSensorsgetSensors.getgetSensors.get(),甚至虽然我知道其中一些是错误的。我也尝试过不将这段代码包装在一个函数中,而是使用在返回上方定义的函数,并在没有对象的情况下返回数组(它在我的其他函数中是如何工作的,尽管我认为这不是最佳实践,但它是只是更简单)。我什至将 for 循环替换为 forEach

基本上,getSensors 工厂的返回值总是在我使用控制台调试完成 $http 调用之前发生,即使代码在回调函数中也是如此在那个循环之后。在花了 2 个小时查看并重写此代码后,我不知道这是怎么可能的。我可能只是遗漏了一些明显的东西或者违反了 Angular 的某些方面。

最佳答案

您缺少的关键部分是返回 .then() 在您的getSensors.get() 方法中创建的 promise :

app.factory('getSensors', ['data', function (data) {
return { get : function() {
return data.get('sensors').then(function (results) {
var sensors = [];

/* for loop (same as before) goes here */

return sensors;
});
}
};
}]);

然后要使用它,只需将 getSensors 服务作为依赖注入(inject),然后调用

getSensors.get().then(function (sensors) { 
/* do something with sensors array */
});

关于javascript - 工厂数据来得太晚——Angular.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35401745/

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