Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 保存回调节点的返回_Javascript_Node.js - Fatal编程技术网

Javascript 保存回调节点的返回

Javascript 保存回调节点的返回,javascript,node.js,Javascript,Node.js,我正在研究mikrotik路由器的路由器操作系统库。 在回调外部显示对API的调用时遇到问题。foo变量应该在API中包含objectrecover,但我无法回避异步化问题 var MikroNode = require('mikronode-ng2'); const USER = "sofian"; const PASSWD = "sofian" var toto; var connection = MikroNode.getConnection('10.0.0.1', USER, PA

我正在研究mikrotik路由器的路由器操作系统库。 在回调外部显示对API的调用时遇到问题。foo变量应该在API中包含objectrecover,但我无法回避异步化问题

var MikroNode = require('mikronode-ng2');

const USER = "sofian";
const PASSWD = "sofian"

var toto;

var connection = MikroNode.getConnection('10.0.0.1', USER, PASSWD)

connection.connect(function (conn) {
    var chan = conn.openChannel();
    conn.closeOnDone = true;
    chan.write('/ip/address/print', function () {
        chan.closeOnDone = true;
        chan.on('done', function (data) {
            var parsed = MikroNode.parseItems(data);
            toto = parsed
            parsed.forEach(function (item) {
                console.log('Interface/IP: ' + item.interface + "/" + item.address);
            })
        })
    })
})

console.log(toto);
返回航站楼:

undefined
Interface/IP: Lan/10.0.0.1/8
Interface/IP: Wan Orange/192.168.1.254/24
谢谢

承诺编辑:

我试过了,但还是不行

var MikroNode = require('mikronode-ng2');

const USER = "sofian";
const PASSWD = "sofian"

var connection = MikroNode.getConnection('10.0.0.1', USER, PASSWD)
var result;

function test() {
    connection.getConnectPromise().then( function (conn) {
        conn.getCommandPromise('/ip/address/print').then(async function resolved(values) {
            // console.log('Addreses: ' + JSON.stringify(values));
            result = 'Addreses: ' + JSON.stringify(values)
            return await result;
        })
    })
}

console.log(test())
终端:

undefined

我添加了async/await,但它并不能解决我的问题

您不能将异步数据(如
数据
解析的
等)拉入同步上下文。考虑一下:通过将回调传递给
connection.connect()
您告诉它“在将来某个不确定的时间调用此函数,当您完成连接时”,然后代码立即继续,并在回调执行之前相对地点击
console.log(toto)
。在该回调中创建的数据无法返回时间


如果您想像编写同步代码一样编写异步代码,请使用-您正在使用的库,因此您必须使用这些函数,而不是这样做。

您无法将异步数据(如
数据
解析的
等)拉入同步上下文。考虑一下:通过将回调传递给
connection.connect()
您告诉它“在将来某个不确定的时间调用此函数,当您完成连接时”,然后代码立即继续,并在回调执行之前相对地点击
console.log(toto)
。在该回调中创建的数据无法返回时间


如果您想像编写同步代码一样编写异步代码,请使用-您正在使用的库,这样您就必须使用这些函数来执行此操作。

我编辑了我的帖子。函数
test()
不返回值。此外,您仍在尝试将异步值提取到同步上下文中。你最好用回调函数或异步函数来访问它。你能用代码来说明你的信息吗?我不知道如何解决我的问题。我仍然试图解决这个问题,但我不明白。我到处都放了一点wait/async,但它不起作用。请查看你的两个问题的答案,你的问题被标记为重复的。我编辑了我的帖子。函数
test()
不返回值。此外,您仍在尝试将异步值提取到同步上下文中。你最好用回调函数或异步函数来访问它。你能用代码来说明你的信息吗?我不知道如何解决我的问题。我仍然试图解决这个问题,但我不明白。我在每个地方都放了一点wait/async,但它不起作用。请查看两个问题的答案,您的问题被标记为重复的。