簡體   English   中英

在node.js中有更好的方法嗎?

[英]Is there a better way to do this in node.js?

我正在使用node.js調用redis來獲取一些數據。 然后,需要將數據排序到數組-而不是一個昂貴的過程,但是我需要一個函數在排序完成后立即執行。

如果我在排序代碼之后立即編寫該函數,它將在完成數組排序工作之前觸發。 因此,我看到了解決此問題的幾種方法:

1)寫for()循環,當前一個循環在最后一次迭代時,下一個循環開始; 在非常結束時,放置異步方法以確保它在所有循環完成之后運行。

2)使用setTimeout()。 我對此感到不安,因為似乎取決於需要處理的數組的大小,它可能神奇地觸發了太早或太晚。

有比嵌套嵌套更好的方法嗎?

您可以使用setTimeout()並將等待時間設置為數組大小的某個函數。 我很同情您,setTimeout()似乎很可怕。 但是,在這樣的時候,這是必不可少的邪惡。

我很驚訝您用來訪問Redis的代碼沒有異步功能,但這應該可以工作:

var done = false;

function sort(){
   ...
   done = true;
}

function sortDone(){
   if(done){
      ...
   }else{
      process.nextTick(sortDone);
   }
}

看來您只需要reduceRight

arr.reduceRight( function( p, c, i ) {
    // sort
    if ( i === 0 ) {
        // You know you're at the last iteration
        // so you can call whatever async func you want
    }
});

暫無
暫無

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

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