gpt4 book ai didi

javascript - json 成功后返回undefined

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:43:33 26 4
gpt4 key购买 nike

我在使用 JS 和 Angular 时遇到了以下问题。

我正在从请求服务获取数据,因此调用请求函数,然后在“成功”函数中对数据执行某些操作。在这个函数中,一切都很好,我得到了所有结果,但是一旦离开成功函数,我的结果就不确定了。我阅读了一些关于类似问题的其他问题/答案,并尝试了其他事情。但是我真的不知道如何处理这个问题,想用一个代码示例明确地问这个问题:

function loadShips() {
var count = 0;
RequestService.getShips(nelat, swlat, nelong, swlong, timestamp)
.success(function(results) {
var groupedShips = results.aisData.aisGroupedByShipType;
_.each(groupedShips, function(groupedShip) {
_.each(groupedShip, function(ship) {
Markers['marker' + count] = createMarker(ship);
count++;
});
});
console.log(Markers, '#1')
return Markers
});
console.log(Markers, '#2');
return Markers;
}

所以任何人都可以告诉我,为什么打印输出“#1”处的标记已定义,而“#2”处的标记未定义。

最佳答案

假设请求是异步完成的,#2 处的调用发生在请求的 success 方法被调用之前。这可以解释为什么该对象尚不存在。

一种解决方案是将回调方法作为参数传递给工厂,然后在请求成功后调用该方法。这看起来像这样:

function loadShips(callBack) {
var count = 0;
RequestService.getShips(nelat, swlat, nelong, swlong, timestamp)
.success(function(results) {
var groupedShips = results.aisData.aisGroupedByShipType;
_.each(groupedShips, function(groupedShip) {
_.each(groupedShip, function(ship) {
Markers['marker' + count] = createMarker(ship);
count++;
});
});
console.log(Markers, "#1");
callBack(Markers);
});
}

使用这个方法看起来像这样:

function myCallback(markers){
console.log(markers, "#2");
//assign markers to something
}

loadShips(myCallback);

关于javascript - json 成功后返回undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35071875/

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