热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Javascript函数返回数组undefined

参见英文答案HowdoIreturntheresponsefromanasynchronouscall?                                    3

参见英文答案 > How do I return the response from an asynchronous call?                                    34个
我有一个函数loadTileSet().此函数必须返回arrTiles(图像数据数组),但函数返回UNDEFINED.我正在使用push将数据放入数组中..

function loadTileSet(){
var canvas = document.getElementById('fakeCanvas');
$('#fakeCanvas').hide();
var ctx = $("canvas")[0].getContext('2d');
var imgTileSet = new Image();
imgTileSet.src = 'tileset.png';
var imageTileNumWidth = 23;
var imageTileNumHeight = 21;
var arrTiles = [];
imgTileSet.Onload= function(){
var imageWidth = imgTileSet.width;
var imageHeight = imgTileSet.height;
sndCanvasWidth = imageWidth/imageTileNumWidth;
sndCanvasHeight = imageHeight/imageTileNumHeight;
canvas.width = imageWidth;
canvas.height = imageHeight;
ctx.drawImage(imgTileSet,0,0,imageWidth,imageHeight);
var i=0;
var j=0;
var t=0;
for(i=0;i for(j=0;j var myImageData = ctx.getImageData(j,i,sndCanvasWidth,sndCanvasHeight);
arrTiles.push(myImageData);
}
}
return arrTiles;
}
}

在这里我尝试将数组放入另一个

var arrNew = loadTileSet();
console.log(arrNew[0]);

解决方法:

Bergi的评论已经说明了这个问题.这是一个异步过程,因此您需要将其作为一个处理.一般的想法是使用回调:

function loadTileSet(callback) {
// ...
imgTileSet.Onload= function () {
// instead of return, do this
callback(arrTiles);
};
}
loadTileSet(function (arrNew) {
// now you can use arrNew
});


推荐阅读
author-avatar
烟为你吸_811
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有