如何在匿名函数中应用node.js REPL?

不幸的是我对node.js没有任何知识,因为直到现在我用Ruby和它的REPL叫做Pry。 我发现node.js也有这样的包,可以用“npm”包pipe理器来安装。 我这样做的理由是node.js包“facebook-chat-api”,这对于以编程方式发送Facebook聊天消息很有用,据我所知,这不能在Ruby(或其他语言)中实现, 。 我安装了在这里find的包https://www.npmjs.com/package/facebook-chat-api,并尝试成功,帮助的例子(face.js和我已经运行与“node face.js”) :

var login = require("facebook-chat-api"); login({email: "XXX.XXX@XXX.XX", password: "XXXXXX"}, function(err,api) { if(err) return console.error(err); var yourID = "000000000000000"; var msg = {body: "Hey! My first programmatic message!"}; api.sendMessage(msg, yourID); }); 

在为用户设置了正确的ID之后,发送了没有缺陷的消息。 然后,我也安装了一个REPL,名为“locus”( https://www.npmjs.com/package/locus ),因为我想在发送消息之后停止node.js脚本,并且发送另一个REPL命令行。 所以我的剧本成为以下内容:

 var login = require("facebook-chat-api"); var locus = require('locus') login({email: "XXX.XXX@XXX.XX", password: "XXXXXX"}, function(err,api) { if(err) return console.error(err); var yourID = "000000000000000"; var msg = {body: "Hey! My first programmatic message!"}; api.sendMessage(msg, yourID); eval(locus); }); 

不幸的是,我的第二个脚本不能如我所料。 我真的得到了一个“locus”REPL提示,但是直到用命令“quit”退出REPL,才会发送facebook聊天消息。 我想在发送消息之后立即停止我的脚本,我想获得REPL promt,然后在可能的情况下再次从REPL调用“api.sendMessage”。 我该怎么做,或者我该如何重构我的脚本,使其能够按照我的意图工作。 也许把匿名函数放在一个真正的命名函数,但我不知道如何做到这一点。

我做了一个小testing,使用setTimeout作为asynchronous请求,假发送请求,而你仍然在轨迹。

这是代码:

 var locus = require('locus'); function login () { setTimeout(function () { console.log('message sent'); },2000); } login(); eval(locus); 

这是我input几个命令的控制台。

 —————————————————————————————————————————————————————————————————————————— 3 : function login () { 4 : setTimeout(function () { 5 : console.log('message sent'); 6 : },2000); 7 : } 8 : 9 : login(); 10 : ʆ: message sent // 2 seconds after the repl opened the first message sent typeof login 'function' // locus is aware of the login function ʆ: login(); login(); // run the login function undefined ʆ: message sent // the message was (fake) sent without quitting login(); // test a second send undefined ʆ: message sent // another message was sent. 

如果上面的代码显示了你期望的行为,你的代码可能是:

 var login = require("facebook-chat-api"); var locus = require('locus'); login({email: "XXX.XXX@XXX.XX", password: "XXXXXX"}, loginHandler); eval(locus); function loginHandler (err,api) { if(err) return console.error(err); var yourID = "000000000000000"; var msg = {body: "Hey! My first programmatic message!"}; api.sendMessage(msg, yourID); }