-3

Chrome拡張機能の書き方を学ぼうとしています。ただし、非同期プログラミングの経験があまりないため、問題が発生しています。

chrome.windows.create(newWindow, function(t){myArray.push(t);});
// When I call myArray next it has not yet updated.

この問題を回避するにはどうすればよいですか?

いくつかのアイデアがあります

while ループに入れる:

int tempLength = myArray.length;
chrome.windows.create(newWindow, function(t){myArray.push(t);});
While (tempLength = myArray.length)
{
    //nothing
}
// call myArray

または、chrome.windows.create の後に 10 ミリ秒の遅延を追加します

何が一番うまくいくでしょうか?この状況を処理する組み込み関数はありますか?

4

4 に答える 4

1

コールバック内で myArray を使用するだけです。

chrome.windows.create(
    newWindow,
    function(t)
    {
        myArray.push(t);

        //Do your length check here
        if ( myArray.length === completeLength ) doMyAction( myArray );
    }
);
于 2013-10-19T06:30:40.923 に答える
0

個人的には、インターバルを使用して新しいアイテムをポーリングしないことをお勧めします。コールバックの一部にします。

var myArray = [];
chrome.windows.create(newWindow,
  function(t){
    myArray.push(t);
    processNewItem(t);
  });

// Do not continue code execution at this point. Let the callback initiate the processing.


function processNewItem(t){
  //do whatever in here
}
于 2013-10-17T16:57:31.117 に答える
0

実行には遅延機能を使用してください。私は自分のプロジェクトでそのような状態で同じものを使用しました。

于 2013-10-17T16:53:27.763 に答える