我是Javascript的新手,我对下面的代码感到困惑几个小时。 我想知道为什么我不能将结果的值赋给htmlContent。 谢谢!
var htmlContent = fs.readFileSync(program.file);
restler.get('http://google.com').on('complete', function(result) {
if (result instanceof Error) {
util.puts('Error: ' + result.message);
} else {
htmlContent = result;
}
});
console.log(htmlContent);
答案 0 :(得分:2)
这里的问题是以restler.get
开头的行在console.log
之前开始,但它不一定在它之前完成。
您应该将console.log
置于restler.get
来电。
答案 1 :(得分:0)
我会在JS中查找期货和承诺的概念,这可能有助于澄清一些基本面: http://monochrome.sutic.nu/2012/04/06/javascript-futures.html
当你在JS中使用continuation(特别是node.js中的一个要求)时,你真的需要了解它们。
答案 2 :(得分:0)
这里,.on()
中的函数将被异步调用(简单来说,它将在“完成”事件发生时执行,即稍后某些时间)并且您正在使用console.log(htmlContent)
是常规函数调用,所以你不能以这种方式在函数内设置htmlContent
值。
如果要在任何其他函数中使用result
值,则应将此值传递给下一个函数。我希望这会奏效。