文件系统是 运行 在 javascript 中的不同线程上吗
is file system is running on diffrent thread in javascript
我使用了 javascript 的文件系统,我注意到文件系统在执行读取后创建文件,但对 readFile
的物理调用是在调用writeFile
.
readFile
var readFile = function () {
console.log("readfile" + new Date());
var that = this;
var result = "";
var successCallback = function (fs) {
console.log("Inside readFile()");
fs.root.getFile('rosters.txt', {create: false, exclusive: false},
function (fileEntry) {
fileEntry.file(function (file) {
var reader = new FileReader();
reader.onloadend = function(e) {
console.log(this.result);
result = this.result;
that.showRosters(this.result);
}; //onloadend() ENDS HERE
reader.readAsText(file);
}, //fileEntry success callback ENDS HERE
function () { console.log("Error occurred during reading file");
result = "Error"; } //error callback for fileEntry.file
); //fileEntry.file ENDS HERE
}, //fs.roor.getFile success callback ENDS HERE
function () { console.log("File Not Found"); } ); //error callback fs.root
}
var errorCallback = function (e) {
console.log(e.toString());
}
this.EMarshal.reqFs.call(window,this.EMarshal.persistent, 5*1024*1024 /*5MB*/, successCallback, errorCallback);
return result
}
writeFile
var writefile = function (rosters) {
console.log("writeFile" + new Date());
var that = this;
console.log("Rosters" + rosters);
var successCallback = function (fs) {
console.log('Opened file system: ' + fs.name);
fs.root.getFile('rosters.txt', {create: true, exclusive: false},
function(fileEntry) {
console.log("File Created");
fileEntry.createWriter( function(writer) {
that.gotFileWriter(writer,rosters);
console.log("write");
}
,function() { console.log("Failed");
this.EMarshal.fail() }
);
},
function (e) {
console.log(e.toString());
} );
}
var errorCallback = function (e) {
console.log(e.toString);
};
console.log('Error: ' + msg);
}
this.EMarshal.reqFs.call(window,this.EMarshal.persistent, 5*1024*1024 /*5MB*/, successCallback, errorCallback);
}
对于gotFileWriter
var gotFileWriter = function (writer,roster) {
writer.seek(writer.length);
writer.truncate(0);
roster = "tripid:" + this.tripid + roster;
writer.write(roster);
}
我试图获取时间,然后 readFile 也在 writeFile 之前 运行。
javascript 是 运行 2 个线程吗?
如果有人能解释为什么会这样,那将会有所帮助。
尝试检查 js-module
中的 name
属性。我在使用相同的插件时遇到了这个问题,它应该与插件名称相同。
如果它不起作用切换到另一个 PhoneGap-SMS 插件。这会很有用。
如果您阅读这篇关于 cordova 中的插件的文档,您就会明白这些插件是如何构建的。 Cordova Plugin Documentation
我使用了 javascript 的文件系统,我注意到文件系统在执行读取后创建文件,但对 readFile
的物理调用是在调用writeFile
.
readFile
var readFile = function () {
console.log("readfile" + new Date());
var that = this;
var result = "";
var successCallback = function (fs) {
console.log("Inside readFile()");
fs.root.getFile('rosters.txt', {create: false, exclusive: false},
function (fileEntry) {
fileEntry.file(function (file) {
var reader = new FileReader();
reader.onloadend = function(e) {
console.log(this.result);
result = this.result;
that.showRosters(this.result);
}; //onloadend() ENDS HERE
reader.readAsText(file);
}, //fileEntry success callback ENDS HERE
function () { console.log("Error occurred during reading file");
result = "Error"; } //error callback for fileEntry.file
); //fileEntry.file ENDS HERE
}, //fs.roor.getFile success callback ENDS HERE
function () { console.log("File Not Found"); } ); //error callback fs.root
}
var errorCallback = function (e) {
console.log(e.toString());
}
this.EMarshal.reqFs.call(window,this.EMarshal.persistent, 5*1024*1024 /*5MB*/, successCallback, errorCallback);
return result
}
writeFile
var writefile = function (rosters) {
console.log("writeFile" + new Date());
var that = this;
console.log("Rosters" + rosters);
var successCallback = function (fs) {
console.log('Opened file system: ' + fs.name);
fs.root.getFile('rosters.txt', {create: true, exclusive: false},
function(fileEntry) {
console.log("File Created");
fileEntry.createWriter( function(writer) {
that.gotFileWriter(writer,rosters);
console.log("write");
}
,function() { console.log("Failed");
this.EMarshal.fail() }
);
},
function (e) {
console.log(e.toString());
} );
}
var errorCallback = function (e) {
console.log(e.toString);
};
console.log('Error: ' + msg);
}
this.EMarshal.reqFs.call(window,this.EMarshal.persistent, 5*1024*1024 /*5MB*/, successCallback, errorCallback);
}
对于gotFileWriter
var gotFileWriter = function (writer,roster) {
writer.seek(writer.length);
writer.truncate(0);
roster = "tripid:" + this.tripid + roster;
writer.write(roster);
}
我试图获取时间,然后 readFile 也在 writeFile 之前 运行。 javascript 是 运行 2 个线程吗? 如果有人能解释为什么会这样,那将会有所帮助。
尝试检查 js-module
中的 name
属性。我在使用相同的插件时遇到了这个问题,它应该与插件名称相同。
如果它不起作用切换到另一个 PhoneGap-SMS 插件。这会很有用。
如果您阅读这篇关于 cordova 中的插件的文档,您就会明白这些插件是如何构建的。 Cordova Plugin Documentation