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

时间:2016-01-01 03:27:06

标签: javascript node.js facebook chat read-eval-print-loop

不幸的是我对node.js一无所知,因为到目前为止我使用Ruby和它的REPL叫做Pry。我发现node.js也有这样的包,可以通过" npm"包经理。我这样做的原因是node.js包" facebook-chat-api"这对于以编程方式发送Facebook聊天消息很有用,据我所知,这不能用Ruby实现(或者也可能用其他语言实现)。我安装了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,然后再次调用" api.sendMessage"如果可能的话,从REPL。我能做什么或如何重构我的脚本以使其按照我的想法工作。也许将匿名函数放到一个真正的命名函数中,但我不知道该怎么做。

1 个答案:

答案 0 :(得分:0)

我做了一个小测试,它使用setTimeout作为异步请求,当你还在locus时,假发送请求。

这是代码:

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