1

私は Node.js アプリを開発しており、Vorpalコマンドを使用しています。コマンドから関数に値を送信しようとしていますが、機能させることができません。私は何か間違ったことをしていますか?

コードは次のとおりです。

vorpal
  .command('rollto <num>', 'Rolls to')
  .action(function(num) {
    rollto(num);
  }); 

function rollto(num) {
    bettime = bettimems % 60;
    socket.emit('betting', bettime);
    timer1 = setInterval(function () {
        bettime--;
        socket.emit('betting', bettime);

        if (bettime == 0) {
            socket.emit('random number', num);     
            console.log("Rolled to:" + num + "!!!");
            clearInterval(timer1);
        }
    }, 1000); 
}
4

1 に答える 1

4

問題は、コマンドに渡す関数に、action想定とは異なる引数があることです。

docsの関連部分は次のとおりです。

.command.action(function)

This is the action execution function of a given command. 
It passes in an arguments object and callback.

Actions are executed async and must either call the passed 
callback upon completion or return a Promise.

そして、ここに実際の例があります:

var vorpal = require('vorpal')();

vorpal
.command('rollto <num>', 'Rolls to')
.action(function(arguments, callback) {
    rollto(arguments, callback);
});

function rollto(arguments, callback) {
    var num = arguments.num;  // get 'num' parameter from arguments
    timer1 = setInterval(function () {
        console.log('test');
        console.log(num);
        clearInterval(timer1);
        callback();  // Don't forget to use callback() to notify vorpal
    }, 1000);
}

vorpal
  .delimiter('myapp$')
  .show();

実際には setInterval 内に非同期コードがあるため、最後に callback() を使用して処理が終了したことを vopal に通知する必要があることに注意してください。

于 2016-01-13T22:25:59.663 に答える