gpt4 book ai didi

javascript - 我如何使用 OS.File.open?

转载 作者:行者123 更新时间:2023-11-29 10:45:53 25 4
gpt4 key购买 nike

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();
}

我在没有 yield 的情况下尝试过,这是更自然的形式,但失败了:在 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 文档太详尽了,我不知道从哪里开始。

最佳答案

异步 ​​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 中可用)

编辑:啊,你正在使用 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");

另见 your other question有关在 SDK 中使用这些内容的更多评论。

关于javascript - 我如何使用 OS.File.open?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19673743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com