gpt4 book ai didi

javascript - 在对象字面量中使用 jquery.when

转载 作者:行者123 更新时间:2023-11-28 03:54:36 26 4
gpt4 key购买 nike

我有一个名为 addLocation 的 javascript/jQuery 函数,它是对象文字的一个方法:

addLocation: function(latLng, address=false, elevation=false, pan=false)
{

$.when(geographic.getAddress(latLng), geographic.getElevation(latLng), geographic.getMagneticDeclination(latLng))
.done(function(data){

if (data.status != 'OK') {
window.alert(data.message);
}

if (pan) {
flyityourself.map.panTo(latLng);
flyityourself.map.setZoom(16);
}

flyityourself.addWaypoint(latLng, data);

flyityourself.addMarker(latLng, data);
})
.fail(function(msg) {
window.alert(msg);
}
);
},

三个函数 getAddress、getElevation 和 getMagneticDeclination 都是名为“geographic”的第二个对象文字的方法。

但是代码失败了。

在调试器中,我检查了所有四个函数。

  • 每个 getAddress、getElevation 和 getMagneticDeclination 都会创建 $.Deferred 对象并按其应有的方式返回 $.Deferred.promise 对象。
  • getAddress、getElevation 和 getMagneticDeclination 都在检索正确的数据,并且都达到了各自的resolve() 语句。
  • 但是在addLocation()中,data参数只包含getAddress返回的数据。

以前,只有 getAddress、getElevation 和 getMagneticDeclination 三个方法位于对象字面量“geographic”中。 addLocation 位于平面 .js 文件中。在本例中,代码有效。

但是自从更改我的代码以将 addLocation 放入对象文字以来,代码开始失败。

$.when 在对象文字中的工作方式是否不同,或者我是否忘记限定某些内容?

问候。克里斯·B.

最佳答案

A. Wolff 在他们的评论中是正确的 - 你在完成的回调中需要 3 个参数,每个参数对应于 when 处理的每个 promise 。

这是一个简单的示例,提供一个模拟地理对象以使您的代码在独立的 fiddle 中工作:

https://jsfiddle.net/tmLrn4gc/1/

// Mock geographic object for testing
geographic = {
// Return a promise, and a second later, resolve that promise with some
// dummy data.
getAddress: function() {
var dfd = $.Deferred();
window.setTimeout(function() {
dfd.resolve("address:lat1,lng1")
}, 1000);
return dfd.promise();
},
getElevation: function() {
var dfd = $.Deferred();
window.setTimeout(function() {
dfd.resolve("elevation:meters")
}, 1000);
return dfd.promise();
},
getMagneticDeclination: function() {
var dfd = $.Deferred();
window.setTimeout(function() {
dfd.resolve("declination:degrees")
}, 1000);
return dfd.promise();
}
};

// A simplified location manager, showing the 3 promises and a done method.
// The console output in the fiddle shows the 3 promises are resolved as
// desired.
LocationManager = {
addLocation: function(latLng, address=false, elevation=false, pan=false) {
$.when(
geographic.getAddress(latLng),
geographic.getElevation(latLng),
geographic.getMagneticDeclination(latLng)
).done(function(d1, d2, d3) {
console.log("Done", d1, d2, d3);
})
}
}

// Make it all happen!
LocationManager.addLocation();

关于javascript - 在对象字面量中使用 jquery.when,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47669532/

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