[求助]关于js回调函数的问题

Z_4545287 2016-09-05 03:04:11
//检查文件(File)是否存在
function checkIfFileExists(path){
var bl;
window.resolveLocalFileSystemURL('cdvfile://localhost/persistent/'+path,function (fileEntry) {
bl = true; //success callback
},function () {
bl = false; //error callback
});
return bl;
}

先上代码,我在使用cordova,想写一个方法判断一个文件是否存在,存在的话返回true,反之false,但是cordova的这个方法涉及回调函数,异步的,像上边的代码返回得到的是undefined,也就是在回调函数执行之前,return语句先执行了,想问一问各位,像我要得到的这个功能的方法,应该怎么写
...全文
274 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Z_4545287 2016-09-05
  • 打赏
  • 举报
回复
引用 8 楼 jslang 的回复:
[quote=引用 6 楼 Z_4545287 的回复:] [quote=引用 5 楼 jslang 的回复:] 这种延时执行的不能用返回值、只能用回调函数 想要用javascript做一些复杂的操作。就一定要学会回调函数的设计模式

function checkIfFileExists(path, callback){
	window.resolveLocalFileSystemURL('cdvfile://localhost/persistent/'+path,function (fileEntry) {
		callback(true);
	},function () {
		callback(false); 
	});
}

不能用返回值吗。。。我是有一些路径,数组,想循环检查每个路径是否存在,存在的话+1,最后得到存在的路径的数量并显示在页面上。如果在回调中增加的话,那是不是到我用i显示的时候也没办法确定回调函数是否执行完了啊?。。。好像可以在回调中加个判断,然后显示[/quote] 用递归的方式循环

function checkIfFileExists(path, callback){
	window.resolveLocalFileSystemURL('cdvfile://localhost/persistent/'+path,function (fileEntry) {
		callback(true);
	},function () {
		callback(false); 
	});
}

var arr = [....................];//一些路径数组
var sum = 0;
function loopfn(i) {
	if (i < arr.length) {
		checkIfFileExists(arr[i], function (flag) {
			if (flag)
				sum++;
			loopfn(i+1);//递归循环
		});
	} else {
		document.getElementById("id").innerHTML = sum;//显示在页面上
	}
}
loopfn(0);

[/quote]好方法,太谢谢了!!!js的回调很精妙的样子,看来得好好看看啊
天际的海浪 2016-09-05
  • 打赏
  • 举报
回复
引用 6 楼 Z_4545287 的回复:
[quote=引用 5 楼 jslang 的回复:] 这种延时执行的不能用返回值、只能用回调函数 想要用javascript做一些复杂的操作。就一定要学会回调函数的设计模式

function checkIfFileExists(path, callback){
	window.resolveLocalFileSystemURL('cdvfile://localhost/persistent/'+path,function (fileEntry) {
		callback(true);
	},function () {
		callback(false); 
	});
}

不能用返回值吗。。。我是有一些路径,数组,想循环检查每个路径是否存在,存在的话+1,最后得到存在的路径的数量并显示在页面上。如果在回调中增加的话,那是不是到我用i显示的时候也没办法确定回调函数是否执行完了啊?。。。好像可以在回调中加个判断,然后显示[/quote] 用递归的方式循环

function checkIfFileExists(path, callback){
	window.resolveLocalFileSystemURL('cdvfile://localhost/persistent/'+path,function (fileEntry) {
		callback(true);
	},function () {
		callback(false); 
	});
}

var arr = [....................];//一些路径数组
var sum = 0;
function loopfn(i) {
	if (i < arr.length) {
		checkIfFileExists(arr[i], function (flag) {
			if (flag)
				sum++;
			loopfn(i+1);//递归循环
		});
	} else {
		document.getElementById("id").innerHTML = sum;//显示在页面上
	}
}
loopfn(0);

Z_4545287 2016-09-05
  • 打赏
  • 举报
回复
引用 5 楼 jslang 的回复:
这种延时执行的不能用返回值、只能用回调函数 想要用javascript做一些复杂的操作。就一定要学会回调函数的设计模式

function checkIfFileExists(path, callback){
	window.resolveLocalFileSystemURL('cdvfile://localhost/persistent/'+path,function (fileEntry) {
		callback(true);
	},function () {
		callback(false); 
	});
}

非常感谢
Z_4545287 2016-09-05
  • 打赏
  • 举报
回复
引用 5 楼 jslang 的回复:
这种延时执行的不能用返回值、只能用回调函数 想要用javascript做一些复杂的操作。就一定要学会回调函数的设计模式

function checkIfFileExists(path, callback){
	window.resolveLocalFileSystemURL('cdvfile://localhost/persistent/'+path,function (fileEntry) {
		callback(true);
	},function () {
		callback(false); 
	});
}

不能用返回值吗。。。我是有一些路径,数组,想循环检查每个路径是否存在,存在的话+1,最后得到存在的路径的数量并显示在页面上。如果在回调中增加的话,那是不是到我用i显示的时候也没办法确定回调函数是否执行完了啊?。。。好像可以在回调中加个判断,然后显示
天际的海浪 2016-09-05
  • 打赏
  • 举报
回复
这种延时执行的不能用返回值、只能用回调函数 想要用javascript做一些复杂的操作。就一定要学会回调函数的设计模式

function checkIfFileExists(path, callback){
	window.resolveLocalFileSystemURL('cdvfile://localhost/persistent/'+path,function (fileEntry) {
		callback(true);
	},function () {
		callback(false); 
	});
}

Z_4545287 2016-09-05
  • 打赏
  • 举报
回复
引用 2 楼 jslang 的回复:
要用return语句返回ajax加载的数据,必须用同步模式async: false 但同步模式会让浏览器线程被锁死。 不想线程被锁死,就只有用异步。 但是异步模式是不能用return语句返回的,必须要改用回调函数。 也就是说remote函数内具体怎么改先不论。 但是你必须改变remote函数的使用方式 当然这可能要修改你的整个程序系统 如原来 接收信息的变量 = 函数(参数); 后面用到“接收信息的变量”的代码 。。。。。。。。。。。 。。。。。。。。。。。 必须改成 函数(参数, function(data){ 接收信息的变量 = data; 后面用到“接收信息的变量”的代码 。。。。。。。。。。。 。。。。。。。。。。。 });
请问有没有个小例子啊,带返回值的
Z_4545287 2016-09-05
  • 打赏
  • 举报
回复
引用 1 楼 Free_Wind22 的回复:
checkIfFileExists再加一个回调函数来返回结果
请问有没有一个小例子啊
天际的海浪 2016-09-05
  • 打赏
  • 举报
回复
要用return语句返回ajax加载的数据,必须用同步模式async: false 但同步模式会让浏览器线程被锁死。 不想线程被锁死,就只有用异步。 但是异步模式是不能用return语句返回的,必须要改用回调函数。 也就是说remote函数内具体怎么改先不论。 但是你必须改变remote函数的使用方式 当然这可能要修改你的整个程序系统 如原来 接收信息的变量 = 函数(参数); 后面用到“接收信息的变量”的代码 。。。。。。。。。。。 。。。。。。。。。。。 必须改成 函数(参数, function(data){ 接收信息的变量 = data; 后面用到“接收信息的变量”的代码 。。。。。。。。。。。 。。。。。。。。。。。 });
2016-09-05
  • 打赏
  • 举报
回复
checkIfFileExists再加一个回调函数来返回结果

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧