首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强制nodejs + ssh2为阻塞调用

强制nodejs + ssh2为阻塞调用
EN

Stack Overflow用户
提问于 2014-03-26 10:51:18
回答 1查看 378关注 0票数 0

我想知道是否有可能以阻塞的方式运行节点-ssh2中提供的方法。

我正在用节点誓言测试我的代码。

conn-test.js片段

代码语言:javascript
复制
suite = vows.describe("conn-test");
suite.addBatch({
    topic: function () {
         return new Connection("1.2.3.4", "root", "oopsoops");
    }
    "run ls": function (conn) {
         conn.send("ls");
    }
});

conn.js片段

代码语言:javascript
复制
var ssh2 = require("ssh2");
function Connection(ip, user, pw) {
    //following attributes will be used on this.send()
    this.sock = new ssh2();
    this.ip = ip;
    this.user = user;
    this.pw = pw;
}
Connection.prototype.send = function (msg) {
    var c = this.sock;
    //Copy the example 1 on https://github.com/mscdex/ssh2
}

节点-誓言运行我的代码没有错误。然而,问题是誓言的终止比从ssh2回调更快。换句话说,我无法从ssh2获得响应。

似乎节点-异步是可能的解决方案之一。但是,我不知道如何在异步的帮助下将事件驱动的调用变成阻塞调用。

有人能帮忙吗?

-2014年4月10日更新

修正标题上的错误..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-09 23:50:55

我以前从未使用过誓言,但根据它们的参考文献,您应该使用this.callback而不是返回值。相反,您的誓言代码看起来可能如下所示:

代码语言:javascript
复制
var ssh2 = require('ssh2'),
    assert = require('assert');
suite = vows.describe('conn-test');
suite.addBatch({
  topic: function() {
    var conn = new ssh2.Connection(),
        self = this;
    conn.connect({
      host: '1.2.3.4',
      port: 22,
      username: 'root',
      password: 'oopsoops'
    });
    conn.on('ready', function() {
      self.callback(conn);
    });
  },
  'run ls': function(conn) {
    var self = this;
    conn.exec('ls', function(err, stream) {
      assert(!err);
      stream.on('exit', function(code, signal, coredump) {
        assert(code === 0);
        assert(!signal);
        assert(!coredump);
        self.callback();
      });
    });
  }
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22658677

复制
相关文章

相似问题

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