首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保存回调nodejs的返回

保存回调nodejs的返回
EN

Stack Overflow用户
提问于 2019-11-14 10:22:00
回答 1查看 74关注 0票数 1

我正在开发mikrotik路由器的router-os库。在回调之外显示对API的调用时遇到问题。foo变量应该只包含API中的对象recover,我不能绕过异步问题

代码语言:javascript
复制
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);

返回终端:

代码语言:javascript
复制
undefined
Interface/IP: Lan/10.0.0.1/8
Interface/IP: Wan Orange/192.168.1.254/24

谢谢

使用Promise进行编辑:

我试了试,但还是不起作用

代码语言:javascript
复制
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())

终端:

代码语言:javascript
复制
undefined

我添加了异步/等待,但它不能解决我的问题

EN

回答 1

Stack Overflow用户

发布于 2019-11-14 10:32:22

不能将异步数据(如dataparsed等)拉入同步上下文。想想看:通过将回调传递给connection.connect(),您告诉它“在将来某个不确定的时间调用此函数,当您完成连接时”,然后代码立即继续,并在回调执行之前以相对较低的方式调用console.log(toto)。在该回调中创建的数据无法回溯到过去。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58848457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档