【问题标题】:How to apply node.js REPL in an anonymous function?如何在匿名函数中应用 node.js REPL?
【发布时间】:2016-01-01 03:27:05
【问题描述】:

不幸的是,我对 node.js 的了解为零,因为到目前为止,我使用的是 Ruby 及其称为 Pry 的 REPL。我发现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 后,它可以正常工作并发送消息而没有任何缺陷。然后我也安装了一个名为“locus”(https://www.npmjs.com/package/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);
});

不幸的是,我的第二个脚本没有按预期工作。我真的得到了一个“轨迹”REPL 提示,但是直到我使用命令“quit”退出 REPL 之后才会发送 facebook 聊天消息。我想在消息发送后完全停止我的脚本,我想获得一个 REPL 提示,然后如果可能的话再次从 REPL 调用“api.sendMessage”。我能做什么或如何重组我的脚本以使其按我的预期工作。也许将匿名函数放到一个真正的命名函数中,但我不知道如何正确地做到这一点。

【问题讨论】:

  • 你真的需要从命令行调用api.sendMessage()吗?或者您只是想输入一条消息并发送出去?

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


【解决方案1】:

我做了一个小测试,它使用 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);
}

【讨论】:

    猜你喜欢
    • 2020-01-05
    • 2020-04-29
    • 2011-07-18
    • 2021-02-02
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多