如何从 javascript 中的回调函数返回变量
How do I return a variable from a callback function in javascript?
我需要返回tempVar
的值,但我无法弄清楚如何做到这一点,因为它是回调的结果。处理这样的事情的正确方法是什么?我真的不知道如何措辞这个问题。我希望它可以通过做类似 var tempReturned = readPWFile('filename.txt');
的事情来工作,但即使我在回调中的某个地方有一个"返回",也没有明显的原因。我的主要目标是将txt
文件的结果返回到变量。有人可以指出我正确的方向吗?
function readPWFile(fileName) {
var tempVar;
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function (fileSystem) {
fileSystem.root.getFile(fileName, null, gotReadFileEntry, fail);
});
function gotReadFileEntry(fileEntry) {
fileEntry.file(gotFile, fail);
}
function gotFile(file) {
readDataUrl(file);
}
function readAsText(file) {
var reader = new FileReader();
reader.onloadend = function (evt) {
tempVar = evt.target.result;
};
reader.readAsText(file);
}
}
您应该通过 API 提供一个回调,该回调将通过将其作为回调参数传递来授予对变量的访问权限。
另一种使用方法是通过使用 promises,它允许您处理可能还没有结果的对象。
例如,你的函数声明应该是
function readPWFile(fileName, callback) {
并且将被调用
readPWFile(filename, function(tempVar) {
alert("Successfully received tempVar");
});
实质上,您的代码将简单地将此回调函数绑定到读取器,而不是使用您的代码。当然,除非你想以某种方式改变结果:
function readPWFile(fileName, callback) {
...
function readAsText(file) {
var reader = new FileReader();
// Preference the user's passed in callback function over the previous implementation
reader.onloadend = callback;
reader.readAsText(file);
}
}
一个好的开始是在Node.js上阅读。Node 的目标之一是通过使用回调模式提供非阻塞 I/O 解决方案。因此,在 Node.js 社区中有大量关于回调模式的材料。
您可以尝试其他解决方案
function getContentFile(filePath){
var FileToOpen = function FileToOpen(filePath)
{
if(window.XMLHttpRequest) var obj = new XMLHttpRequest(); //Firefox, Opera,...
else if(window.ActiveXObject) var obj = new ActiveXObject("Microsoft.XMLHTTP"); //Internet Explorer
else return(false);
if (obj.overrideMimeType) obj.overrideMimeType("text/html"); //Avoids bug with Safari
obj.open("GET", filePath, false);
obj.send(null);
if(obj.readyState == 4) return(obj.responseText);
else return(false);
}
var content = FileToOpen(filePath);
return content;
}
我使用这个函数并读取一个 html 文件。
并像这样调用此函数
var contentFile = getContentFile(yourFilePath/file.html);
传入要在
值更新时调用的回调:
function readPWFile(fileName, cb) {
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSystem) {
fileSystem.root.getFile(fileName, null, gotReadFileEntry, fail);
});
function gotReadFileEntry(fileEntry) {
fileEntry.file(gotFile, fail);
}
function gotFile(file) {
readDataUrl(file);
}
function readAsText(file) {
var reader = new FileReader();
reader.onloadend = function(evt) {
cb(evt.target.result);
};
reader.readAsText(file);
}
}
用法:
readPWFile("test", function(val) {
console.debug("Value: " + val);
});
相关文章:
- JavaScript回调函数
- 如何在回调函数中执行流
- 回调函数中传递参数的困难(Google Map API Markers)
- 如何正确地将参数传递给RequireJS回调函数
- 回调函数在python代码中离线
- 从AJAX回调函数中分离数据
- 赋值后的回调函数
- 如何在javascript回调函数中返回多个变量
- 函数表达式,返回回调函数
- 等待回调函数执行
- JavaScript回调函数和Google Feed API
- 如何从ajax成功回调函数中读取javascript变量
- 正在保存JavaScript内部回调函数中的值
- 有没有什么方法可以停止Jquery中的animate(也可以停止完整的回调函数)
- 如何在javascript中添加带有回调函数的按钮点击事件作为window.conf
- 在Golang回调函数中启用CORS
- 在初始函数完成之前调用回调函数
- jQuery Mobile:如何在$.Mobile.changePage之前运行回调函数
- 即使使用回调函数也无法返回值
- 为什么prototypjs观察到回调函数有绑定