我正在使用以下背对背命令在cordova应用中执行简单的文件检查:

function initWhipData(dir) {
   console.log("DIR = " +dir) ;
}

//Test:
window.resolveLocalFileSystemURL(fPath + "whipdata.json",
   function() { console.log("TEST File Exists")},
   function() { console.log("TEST File doesnt exist") }
) ;

//Actual:
window.resolveLocalFileSystemURL(fPath + "whipdata.json",
   initWhipData(10),
   initWhipData(20)
) ;


在控制台中。我得到以下内容,但不明白为什么:

TEST File Exists  // expected
Dir = 10  // expected
Dir = 20  // not expected


在第二个文件检查中,成功和失败都被调用。我做错了什么...不了解?

然后,我尝试了以下操作并获得了预期的结果:

window.resolveLocalFileSystemURL(fPath + "whipdata.json",
   function() {initWhipData(10)},
   function() { initWhipData(20)}
) ;


打印出“ Dir = 10”。显然,我没有理解我以为自己理解的东西。为什么在仅将函数直接引用为成功/失败回调不起作用的情况下将函数包装到函数中起作用?

最佳答案

这就是我们调用函数并获取结果的方式var a = initWhipData(10);
这就是我们如何获得函数var a = initWhipData;的引用

我的意思是,您尝试调用initWhipData函数,然后将其结果作为参数传递,而不是传递其引用。
这就是为什么首先调用initWhipData(10)和initWhipData(20),然后将返回值作为参数传递的原因。

window.resolveLocalFileSystemURL(fPath + "whipdata.json",
   initWhipData(10),
   initWhipData(20)
);


下面是有关如何传递回调函数的示例。

window.resolveLocalFileSystemURL(fPath + "whipdata.json",
   successCallback, //If success then call this function
   errorCallback //If error happen then call this function
);

function successCallback(){
    initWhipData(10)
}
function errorCallback(){
    initWhipData(20)
}

07-24 09:20