簡體   English   中英

如何在匿名函數中應用node.js REPL?

[英]How to apply node.js REPL in an anonymous function?

不幸的是,我對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 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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM