Javascript 在回拨中更新数组
我有以下两项职能:Javascript 在回拨中更新数组,javascript,asynchronous,callback,Javascript,Asynchronous,Callback,我有以下两项职能: var abc; function updateNum() { abc=0; g.dbm.transaction("leagues").objectStore("leagues").openCursor(null, "prev").onsuccess = function (event) { var teams, i; team.filter({ attrs: ["tid", "abbrev", "r
var abc;
function updateNum() {
abc=0;
g.dbm.transaction("leagues").objectStore("leagues").openCursor(null, "prev").onsuccess = function (event) {
var teams, i;
team.filter({
attrs: ["tid", "abbrev", "region", "name", "cid"],
seasonAttrs: ["winp", "playoffRoundsWon"],
season: g.season
}, function (teams) {
// Sort teams by playoffs and winp, for first round
teams.sort(function (a, b) {
if (a.playoffRoundsWon < b.playoffRoundsWon) {
return -1;
}
if (a.playoffRoundsWon > b.playoffRoundsWon) {
return 1;
}
return a.winp - b.winp;
});
abc+=1;
});
};
}
function getNum() {
return abc;
}
我当前无法返回更新后的num
值<代码>编号不断返回0(默认值),而不是新更新的值(1)
如何使其显示更新的值?如果我需要添加更多信息,请告诉我。好吧,如果
updateNum
是异步的,那么它必须将回调作为参数,以便在更新号码时通知您
例如
下面是一个使用带有回调的异步函数传递异步结果的通用模式。什么是
team.filter
?您需要设计代码,使异步部分调用传递给封闭函数的callback()
函数
如果过滤给您带来了问题,您可能想看看
(函数main(){
getNum(函数(err,abc){
console.log('thx播放'+abc)
});
})();
函数getNum(另一个回调函数){
//任何依赖于异步函数结果的代码都必须
//放在回调函数中
计数团队(职能部门(abc){
log('countTeams completed,abc='+abc);
var err=null;
另一个回调(err,abc);
});
};
函数countTeams(回调){
var-abc=0;
g、 dbm.transaction(“leagues”).objectStore(“leagues”).openCursor(null,“prev”).onsuccess=函数(事件){
var团队,i;
//我不知道这个过滤函数做什么,我假设它是同步的
团队过滤器({
属性:[“tid”、“缩写”、“地区”、“名称”、“cid”],
季节属性:[“winp”、“季后赛回合”],
季节:g季节
},职能(团队){
//第一轮按季后赛和winp对球队进行排序
团队。排序(功能(a、b){
如果(a.季后赛回合b.季后赛轮次){
返回1;
}
返回a.winp-b.winp;
});
abc+=1;
});
返回回调(abc);//0或n取决于team.filter的作用
};
};
因此我在updateNum
函数的参数中添加了cb
。接下来,我在abc+=1
行下添加了cb&&cb(abc)
。我将getNum
函数更改为如下:getBottomTeams(函数(abc){returnabc;})
现在,当我打开控制台时,我得到了uncaughtreferenceerror:getNum没有定义。“我在这里犯了什么明显的错误吗?”根据你的解释,那个不能跟那个女孩说话的人说,这似乎很好。也许您可以重新发布修改代码的相关部分?
myFile.updateNum();
var number = myFile.getNum();
var num = 0;
function updateNumAsync(callback) {
setTimeout(function () {
num = 1;
callback && callback(num); //call the callback if provided
}, 500);
}
updateNumAsync(function (num) {
console.log(num); //updated num
});
(function main(){
getNum(function(err, abc){
console.log('thx for playing '+abc)
});
})();
function getNum(anotherCallback) {
// Whatever code relies on the result of an asynchronous function must be
// placed inside the callback function
countTeams(function(abc){
console.log('countTeams completed, abc='+abc);
var err = null;
anotherCallback(err, abc);
});
};
function countTeams(callback){
var abc=0;
g.dbm.transaction("leagues").objectStore("leagues").openCursor(null, "prev").onsuccess = function (event) {
var teams, i;
// I don't know what this filter function does, I am assuming it's synchronous
team.filter({
attrs: ["tid", "abbrev", "region", "name", "cid"],
seasonAttrs: ["winp", "playoffRoundsWon"],
season: g.season
}, function (teams) {
// Sort teams by playoffs and winp, for first round
teams.sort(function (a, b) {
if (a.playoffRoundsWon < b.playoffRoundsWon) {
return -1;
}
if (a.playoffRoundsWon > b.playoffRoundsWon) {
return 1;
}
return a.winp - b.winp;
});
abc+=1;
});
return callback(abc); // 0 or n depending on what team.filter does
};
};