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

Javascript 如何在匿名函数中应用node.js REPL?,javascript,node.js,facebook,chat,read-eval-print-loop,Javascript,Node.js,Facebook,Chat,Read Eval Print Loop,不幸的是,我对node.js一无所知,因为到目前为止我使用的是Ruby及其名为Pry的REPL。我发现node.js也有这样的包,可以由“npm”包管理器安装。我这样做的原因是node.js包“facebook聊天api”,它对于以编程方式发送facebook聊天消息非常有用,据我所知,这在Ruby中是无法实现的(或者在其他语言中也是如此)。我安装了在这里找到的软件包,并成功地进行了尝试,示例的帮助(face.js,我使用“node face.js”运行了它): 为用户设置了正确的ID后,它工作

不幸的是,我对node.js一无所知,因为到目前为止我使用的是Ruby及其名为Pry的REPL。我发现node.js也有这样的包,可以由“npm”包管理器安装。我这样做的原因是node.js包“facebook聊天api”,它对于以编程方式发送facebook聊天消息非常有用,据我所知,这在Ruby中是无法实现的(或者在其他语言中也是如此)。我安装了在这里找到的软件包,并成功地进行了尝试,示例的帮助(face.js,我使用“node face.js”运行了它):

为用户设置了正确的ID后,它工作正常,发送的消息没有瑕疵。然后我也安装了一个名为“locus”()的REPL,因为我想在消息发送后停止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提示,但是facebook聊天信息直到我用“quit”命令退出REPL后才会发送。我想在消息发送后立即停止我的脚本,我想获得一个REPL promt,然后在可能的情况下再次从REPL调用“api.sendMessage”。我可以做些什么,或者如何重组我的脚本,使其按照我的预期工作。也许要把匿名函数放到一个真正命名的函数中,但我不知道如何正确地做到这一点。

我做了一个小测试,在异步请求中使用setTimeout,并在您仍在运行时假发送请求

代码如下:

var locus = require('locus');

function login () {
    setTimeout(function () {
        console.log('message sent');
    },2000);
}

login();

eval(locus);
这是控制台,我在里面输入了一些命令

——————————————————————————————————————————————————————————————————————————
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);
}

您真的需要从命令行调用
api.sendMessage()
?或者你只是想键入一条消息并发送出去?
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);
}