我一直在玩 jsdom,它是 node.js 的一个模块。底部的以下代码来自他们的文档页面。我的问题是如何从异步函数返回一些东西。
我知道这是一个经常被问到的问题,可能我也是。我也知道回调是解决这类问题的好朋友。我的目标是找到一种解决方法,它可能类似于 PHP 中的 cookie 或 Session 变量,以便将那一点点数据传输到异步函数之外的外部范围。然后,一旦从外部范围设置数据,它就应该可以访问。
我想知道的第一件事是:
- 是否已经有一种方法可以将数据存储在某个地方,例如存在于外部范围内的 cookie 或会话,并且一旦我完成了我必须做的事情就可以访问?
- 如果我要在代码中的B点将数据写入文件,并在C点读取它,我是否必须编写某种超时函数来等待几秒钟才能读取文件?我在 nodejs 中使用异步函数的经验有时表明,在尝试读取之前,我必须等待几秒钟才能完成写入过程。这里也会出现这种情况吗?如果是,那是否意味着如果我保存数据的位置是内存,就必须发生这种情况?
- 如果我要为此目的编写一个 c++ 插件,它充当一个单独的数据托架,我们可以
save(data)
在B点到内存,retrieve(data)
在C点从内存;这行得通吗?
老实说,我不喜欢编写临时文件来解决异步函数。我一直在寻找一种简单而有效的方法来传递数据,但我需要像您这样有经验的程序员的一些指导,以超越解决这个问题的不必要的方法。
如果您能为我提出一些想法,说明什么可行,什么不可行,我将不胜感激。
这是示例代码:
// Print all of the news items on hackernews
var jsdom = require("jsdom");
// var result;
// A) Outer Scope: Since the function is async in done, storing the result here and echoing in point C is pointless.
jsdom.env({
html: "http://news.ycombinator.com/",
scripts: ["http://code.jquery.com/jquery.js"],
done: function (errors, window) {
var $ = window.$;
console.log("HN Links");
$("td.title:not(:last) a").each(function() {
console.log(" -", $(this).text());
});
// B) let's say I want to return something I've scavenged here.
// result = $("a");
}
});
// C)
// console.log(result)