gpt4 book ai didi

javascript - 我可以获得从 $.Deferred() 返回的可在显示中使用的值吗?

转载 作者:行者123 更新时间:2023-12-02 14:21:39 25 4
gpt4 key购买 nike

我正在使用 $.Deferred 方法尝试获取一个函数来加载一些 Json,处理结果,然后将值传递回另一个将使用结果的函数(在此如果我期望一个整数)。由于某种原因,我可以使用 alertconsole.log 函数显示此整数,但是当将其用作实际函数的返回值时,代码会下降并返回未定义

这是我的代码供引用:

function NewValue(){
var dataPromise = GetDataFromJson();
dataPromise.done(function(data){
//note both console.log(data) and alert(data) deliver the correct result here
return data;
});
}

function GetDataFromJson() {
var jsonData;
var deferred = $.Deferred();
d3.json("http://localhost:8000/pipeline.json", function(dataFromServer){
jsonData = dataFromServer;
headers = ["Won"];
myTotal = 0;
chunks = (headers.map(function(priceRange) {
return jsonData.map(function(d) {
return {y: +d[priceRange]};
});
}));
var myTarget = 10000000;
chunks.forEach( function (arrayItem)
{
var l = 12;
for(var i = 0; i < l; i++) {
myTotal += arrayItem[i].y;
};
});
myTotal = myTotal/myTarget*100;
deferred.resolve(myTotal);
});
return deferred.promise();
}

是否可以从 GetDataFromJson() 返回值并使用它,或者我只能将其记录到控制台?

编辑阅读答案后,唯一的方法是在我的 GetDataFromJson 调用中调用仪表更新函数 - 所有这些 promise 似乎都是毫无意义的干扰,只是传递正确的信息:

function GetDataFromJson(f) {
var jsonData;
var deferred = $.Deferred();
d3.json("http://localhost:8000/pipeline.json", function(dataFromServer){
jsonData = dataFromServer;
if( f == "Current"){
console.log('c');
headers = ["Won"]
} else if( f == "Projected"){
console.log('p');
headers = ["Won", "Prospecting", "Qualifying", "Demonstrating", "Negotiating"]
}
else {
alert('An error has occured')
};

myTotal = 0;
chunks = (headers.map(function(priceRange) {
return jsonData.map(function(d) {
return {y: +d[priceRange]};
});
}));
var myTarget = 10000000;
chunks.forEach( function (arrayItem)
{
var l = 12;
for(var i = 0; i < l; i++) {
myTotal += arrayItem[i].y;
};
});
myTotal = myTotal/myTarget*100;
gauge5.update(myTotal);
deferred.resolve(myTotal);
});
return true;
}

现在,我通过单击单选按钮直接调用 GetDataFromJson(),并在该调用中传递“当前”或“预计”,以便显示正确的数据。我浪费了一周的时间来研究这个,这感觉很愚蠢,但希望这个答案对其他人有帮助。您无法从这些 promise 中提取数据,但您可以调用另一个函数(在我的例子中为 gauge5.update)并向其发送您想要使用的值。

最佳答案

您在回调中返回“数据”,而不是在函数 NewValue 中。 NewValue 应该返回 Promise,并且 NewValue 的调用者应该在完成此 Promise 时分配一个回调。

function NewValue(){
var defer = $.Deferred();
var dataPromise = GetDataFromJson();
dataPromise.done(function(data){
//note both console.log(data) and alert(data) deliver the correct result here
deferred.resolve(data);
});
return deferred.promise();
}

NewValue()
.done(function(data){
// do whatever
})

我假设您想在NewValue函数中进一步处理数据,否则为什么不能直接调用GetDataFromJson?

关于javascript - 我可以获得从 $.Deferred() 返回的可在显示中使用的值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38602488/

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