恶心的h5 io异步操作

一 h5对文件进行操作,需要获得,操作后的结果来作为循环的执行条件,进行下一步操作,但由于plus.io.resolveLocalFileSystemURL()方法是异步调用,导致结果没有返回,下一次循环就开始执行.
百度方法1:.async/await方式

export const getUserToken = () => new Promise((resolve, reject) => {
setupWebViewJavascriptBridge((bridge) => {
bridge.callHandler(‘fetchUserInfo’, (data) => {
resolve(data)
})
})
})
async function(){ //注意await外层函数需要有data标识,表示里面是异步
const data = await getUserToken()
console.log(data )
用法挺简单,然而在本次项目中并不能用来;
2:ES 6中原生提供了Promise对象,Promise对象代表了某个未来才会知道结果的事件(一般是一个异步操作),并且这个事件对外提供了统一的API,可供进一步处理。
使用Promise对象可以用同步操作的流程写法来表达异步操作,避免了层层嵌套的异步回调,代码也更加清晰易懂,方便维护。

Promise.prototype.then()
没有去尝试,但应该是个解决途径
3:递归解决,恶心
function digui(fragmentFile,list,fragmentFolder,lis,names,files,paths,t,pResult,name3){

			if(pResult != "全部"){
				
			plus.io.resolveLocalFileSystemURL(paths[t],function(entry)
			{
				 	console.log(paths[t]);
					entry.file( function(file2){  
			        var fileReader = new plus.io.FileReader();  
					fileReader.readAsText(file2, 'utf-8');
					fileReader.onloadend = function(evt) {
			       	let result = evt.target.result;
			       	let arr = result.split("=");
			       	console.log(arr);
			       	if(arr.length > 1 && arr[1].indexOf(pResult) !=-1){	
						console.log(11111)
			       		flag = true; 
						var	name=names[t];
						var li=lis[t];
						if(name3.indexOf(name)==-1){
						li=innerHtml(files[t],li,name);	
						fragmentFolder.appendChild(li);
						name3=name3+name+",";
						}
						lis[t]=li;
						
						
							}
										t++;
												if(t<names.length){
														digui(fragmentFile,list,fragmentFolder,lis,names,files,paths,t,pResult,name3);
												} else{
																		list.appendChild(fragmentFolder);
																		list.appendChild(fragmentFile);  
																		mask.close();
																		document.querySelector('.loading').style.display = 'none';
																	}
						}
			    } );  
			})
			}else{
				for(let j=0;j<names.length;j++){
					var	name=names[j];
					var li=lis[j];
					li=innerHtml(files[j],li,name);	
					lis[j]=li;
					fragmentFolder.appendChild(li);
				}
				
				list.appendChild(fragmentFolder);
				list.appendChild(fragmentFile);  
				mask.close();
				document.querySelector('.loading').style.display = 'none';	
			}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值