异步 OS.File API 返回Promise
s。最好与Task.jsm
function write_text(filename, text) {
var encoder = new TextEncoder();
var data = encoder.encode(text);
Task.spawn(function() {
let pfh = yield OS.File.open("/tmp/foo", {write: true});
yield pfh.write(data);
yield pfh.close();
});
}
该文档有一些示例。
另外,flush()
如果您不需要,请不要这样做(flush()
无论如何,异步 API 仅在 Firefox 27 中可用)
编辑:啊,您正在使用 SDK,我在重新阅读您的问题的实际错误时收集到。
- 您需要
TextEncoder
从其他模块显式导入,因为 SDK 模块缺少该类。
append:
仅在 Firefox 27+ 中受支持
- 你
write: true
要写入一个文件。
这是我在 Firefox 25 ( main.js
)中测试的完整的工作示例
const {Cu} = require("chrome");
const {TextEncoder, OS} = Cu.import("resource://gre/modules/osfile.jsm", {});
const {Task} = Cu.import("resource://gre/modules/Task.jsm", {});
function write_text(filename, text) {
var encoder = new TextEncoder();
var data = encoder.encode(text);
filename = OS.Path.join(OS.Constants.Path.tmpDir, filename);
Task.spawn(function() {
let file = yield OS.File.open(filename, {write: true});
yield file.write(data);
yield file.close();
console.log("written to", filename);
}).then(null, function(e) console.error(e));
}
write_text("foo", "some text");
有关在 SDK 中使用这些内容的更多评论,另请参阅您的其他问题。