Node.js 访问范围外的变量?nodejs

Node.js 访问范围外的变量?nodejs,node.js,Node.js,运行此命令会导致“未定义”。如何访问函数figlet对函数figlet外部定义的变量结果所做的更改。这是异步代码。它不能返回。它必须有回调,并在作业完成后响应 function art(dataToArt){ var figlet = require('figlet'); var result; figlet(dataToArt, function(err, data) { if (err) { console.log('Something went wrong...

运行此命令会导致“未定义”。如何访问函数figlet对函数figlet外部定义的变量结果所做的更改。

这是异步代码。它不能返回。它必须有回调,并在作业完成后响应

function art(dataToArt){
  var figlet = require('figlet');
var result;
figlet(dataToArt, function(err, data) {
    if (err) {
        console.log('Something went wrong...');
        console.dir(err);
        return;
    }
    var result = data;
});
return result;
}

test = art('Hello World');

console.log(test);
由@得出的结论完全正确

我个人喜欢使用:


似乎
figlet
是一个异步函数。你不能。您需要在回调中完成所有工作。我正在使用且从未使用过nodejs“”,但您在多个作用域中声明了
result
,因此您返回的
结果与分配给
数据的
结果不同。但是,在不使用var的情况下更改(
result=data;
)不会解决执行时间的问题。。。。你一开始从来没有使用过JavaScript吗?看看figlet文档中的“简单示例”,在这里使用异步回调函数的结果
数据
。这在本地有效,但在我看来不是。谢谢你的回答,很抱歉我不能+1你的回答,因为stackoverflow不允许我这样做。
var figlet = require('figlet');

function art(dataToArt, callback)
{ 
    figlet(dataToArt, function(err, data) { 
        if (err) { 
            console.log('Something went wrong...'); 
            console.dir(err); 
            return callback(''); 
        } 

        callback(data);
    }); 
} 


art('Hello World', function (data){
    console.log(data);
    // also You can do operations here.
    // for example can save to db or send to somewhere.
});
var figlet = require('figlet');

function art(dataToArt) {
    return new Promise(function(fullfil, reject) {
        figlet(dataToArt, function(err, data) {
            if (err) {
                reject(err);
            } else {
                fullfil(data);
            }
        });
    });
}

art('Hello World').then(function(result) {
    console.log(result);
});