Corodva 文件读取执行成功和失败回调
corodva file read executing both success and failure callbacks
我有一个用科尔多瓦编写的移动应用程序。 它将一些数据保存到本地存储中,并在下次启动时尝试读取它。
我从这里得到了代码:
https://www.neontribe.co.uk/cordova-file-plugin-examples/
function readFromFile(fileName, cb, cbErr) {
var pathToFile = cordova.file.dataDirectory + fileName;
window.resolveLocalFileSystemURL(pathToFile, function (fileEntry) {
fileEntry.file(function (file) {
var reader = new FileReader();
reader.onloadend = function (e) {
cb(JSON.parse(this.result));
};
reader.readAsText(file);
}, cbErr("oops"));
}, cbErr("darn"));
}
var cbError = function(){}
var fileData;
readFromFile('somefile.txt', function (data) {
fileData = data;
},cbError );
它都在我的设备就绪函数中。
问题是,当某个文件.txt同时存在成功回调(cb)和错误回调(cbError)时,都会执行。 首先是 cbError,然后是 cb 和 cb 返回我期望的数据。
两个回调都从 fileEntry.file() 触发
有人猜测发生了什么吗?
你编码的方式实际上是在调用函数cbErr
,而不是将其作为参数传递。看
window.resolveLocalFileSystemURL(pathToFile, function (fileEntry) {
fileEntry.file(function (file) {
var reader = new FileReader();
reader.onloadend = function (e) {
cb(JSON.parse(this.result));
};
reader.readAsText(file);
}, cbErr("oops")); // <- This is going to be invoked
}, cbErr("darn")); // <- This is going to be invoked
你想做的是这个
window.resolveLocalFileSystemURL(pathToFile, function (fileEntry) {
fileEntry.file(function (file) {
var reader = new FileReader();
reader.onloadend = function (e) {
cb(JSON.parse(this.result));
};
reader.readAsText(file);
}, function() { // <- This is going to be sent as an argument
cbErr("oops")
});
}, function() { // <- This is going to be sent as an argument
cbErr("darn")
});
在您发布的链接中,这家伙正在使用该功能 .bind
.这是一个非常有趣的函数,当您想要调用一个函数并返回另一个函数时,您可以使用它,该函数加载了提供的范围和参数。查看有关它的 Mozilla 文档。如果要遵循该示例,则应将代码替换为以下内容:
window.resolveLocalFileSystemURL(pathToFile, function (fileEntry) {
fileEntry.file(function (file) {
var reader = new FileReader();
reader.onloadend = function (e) {
cb(JSON.parse(this.result));
};
reader.readAsText(file);
}, cbErr.bind(null, "oops")); // <- Here is the .bind function
}, cbErr.bind(null, "darn")); // <- Here is the .bind function
相关文章:
- 当我的单元测试失败时,回调被调用了两次
- AJAX 回调在 Firefox 中失败
- 客户端如何知道发射是否失败?socket.emit()有回调吗
- 返回按钮回调函数在特定情况下失败或未启动
- ajax中的refrer函数名,失败时反向回调
- IE中的jQuery load()回调失败
- 咖啡脚本化的 ajax 调用结果在实际成功时失败回调
- 为什么 Ajax 请求成功,但最终以失败回调告终
- rsvp.js 如何处理被拒绝的承诺和失败回调链
- Corodva 文件读取执行成功和失败回调
- 语义 UI 在成功时,在表单验证时未触发失败回调
- .post()失败回调函数
- 在Jasmine单元测试中,如何强制失败回调来触发失败请求
- 虽然执行了Ajax请求,但调用了失败回调,服务器返回200个数据
- jquery.ajax究竟什么时候运行失败回调
- BreezeJS失败回调导致'undefined不是对象错误'例外
- jQuery ajax-只有在所有重试都失败时才触发失败回调函数
- Breeze entityManager调用失败回调,即使成功
- JQuery ajax()完成/失败回调在状态200时未返回
- jQuery.post() 失败回调函数