function write_text(filename, text) {
let pfh = yield OS.File.open("/tmp/foo", {append: true});
yield pfh.write(text);
yield pfh.flush();
yield pfh.close();
}
我试过没有产量这是更自然的形式但是破了: 在python中我会做yielded_object.next()
error: scribus-web-slurp: An exception occurred.
TypeError: pfh.write is not a function
resource://jid1-orxy9dnn8jbfeq-at-jetpack/scribus-web-slurp/lib/main.js 28
Traceback (most recent call last):
我知道Javascript但它是导致问题的Firefox扩展 - 是否有任何教程可以引导我完成整个过程或让我从头开始? MDN文档太详尽,我不知道从哪里开始。
答案 0 :(得分:3)
异步OS.File API返回Promise
个。最好与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();
});
}
documentation有一些例子。
另外,如果您不需要flush()
,并且异步API中的flush()
仅在Firefox 27中可用,则不要TextEncoder
修改强>: 啊,你正在使用SDK,我在重新阅读你的问题的实际错误时收集。
append:
,因为SDK模块缺少类。write: true
仅在Firefox 27 + main.js
要写入文件。这是我在Firefox 25(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");
)
{{1}}
另请参阅your other question以获取有关在SDK中使用此内容的更多评论。