5

lastbalancegetBalance が定義されていないため、関数 getBalance は本来の機能を実行しません。これは非同期性の問題かもしれないと思いましたが、それは最初の間隔の前にのみ当てはまる可能性がありますよね? 何か案は?

var lastbalance;
getBalance = function (lastbalance, callback){
  btcclient.getBalance('*', 0, function(err, balance) {
    if (err) return console.log(err);
    if (lastbalance != balance || typeof lastbalance == 'undefined'){
      console.log('Last Balance:' + lastbalance);
      var lastbalance = balance;
      updateCauses();
    }
    console.log('Balance:', balance);


    if (typeof callback=='function') callback();

  });
};

setInterval(getBalance, 2000, lastbalance);
4

3 に答える 3

5

2 つの問題。

1.:lastbalance関数パラメーターとして定義しました...これlastbalanceにより、関数のコンテキストで別の変数が作成されました...これは、外側のスコープで宣言された変数に取って代わりました。

var lastbalance; // your outer variable
getBalance = function (lastbalance, callback) { // weeeee, another lastbalance
    btcclient.getBalance('*', 0, function (err, balance) {
        if (err) return console.log(err);
        if (lastbalance != balance || typeof lastbalance == 'undefined') {
            console.log('Last Balance:' + lastbalance);
            var lastbalance = balance;
            updateCauses();
        }
        console.log('Balance:', balance);
        if (typeof callback == 'function') callback();
    });
};

setInterval(getBalance, 2000, lastbalance); //passing lastbalance by value

2.:以前は、関数内でvarさらに別のものを宣言していました。lastbalanceそうしないでください。上記と同じ問題が発生しました。

var lastbalance; // your outer variable
getBalance = function (lastbalance, callback) {
    btcclient.getBalance('*', 0, function (err, balance) {
        if (err) return console.log(err);
        if (lastbalance != balance || typeof lastbalance == 'undefined') {
            console.log('Last Balance:' + lastbalance);
            var lastbalance = balance; // here you create a local lastbalance.
                                       // remove the var keyword to refer to
                                       // the original lastbalance
            updateCauses();
        }
        console.log('Balance:', balance);
        if (typeof callback == 'function') callback();

    });
};

setInterval(getBalance, 2000, lastbalance);

最後に、コードは次のようになります。

var lastbalance;
getBalance = function (/*lastbalance, */callback) { // remove parameter
    btcclient.getBalance('*', 0, function (err, balance) {
        if (err) return console.log(err);
        if (lastbalance != balance || typeof lastbalance == 'undefined') {
            console.log('Last Balance:' + lastbalance);
            /*var*/ lastbalance = balance; // remove var
            updateCauses();
        }
        console.log('Balance:', balance);
        if (typeof callback == 'function') callback();
    });
};

setInterval(getBalance, 2000/*, lastbalance*/); // remove argument
于 2013-11-06T19:18:44.543 に答える
1

非常に多くのlastBalance変数が飛び交っています。

  • 外側のスコープの 1 つvar lastBalance =
  • 関数内の 1 つgetBalance(パラメーター名)
  • コールバック関数の 1 つvar lastBalance =

これはlastBalance =、内部関数で行うと、変数の 3 分の 1 だけが設定されることを意味します。スコープ外で変数を設定するコードはありません。undefined関数が実行されるたびに、内側のスコープのものに設定されます。

1つの変数だけが必要だと確信しています。次のようなことをする必要があります:

var lastbalance;
getBalance = function (callback){
  btcclient.getBalance('*', 0, function(err, balance) {
    if (err) return console.log(err);
    if (lastbalance != balance || typeof lastbalance == 'undefined'){
      console.log('Last Balance:' + lastbalance);
      lastbalance = balance;
      updateCauses();
    }
    console.log('Balance:', balance);

    if (typeof callback=='function') callback();
  });
};

setInterval(getBalance, 2000);

私はあなたのAPIに慣れていないので、これは正確ではないかもしれませんが、おそらくそれほど間違っていません.

于 2013-11-06T19:25:28.897 に答える