[英]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.