[問題] 有關node.js的問題 (nodeschool)

看板Ajax作者 (擦肩而過的歲月)時間10年前 (2015/10/26 10:32), 編輯推噓1(105)
留言6則, 2人參與, 最新討論串1/1
各位JS大大先進們, 我最近在努力學習JS以及node.js 找了一些線上學習課程的網站來幫助自己入門, 可是在寫到其中一個作業時, 發現不斷地發生錯誤, 在嘗試理解問題後還是不太知道怎麼解決或是我錯在哪裡, 以下是我的程式碼以及官方給的解答, 請幫我看我錯在哪邊... 非常感謝大家的幫忙. ------------------------------------------------------------------------------ 使用 http.get() 方法, 從命令列參數取得URL(網址)。 把每個網址的內容收集完整以後才顯示在終端機(標準輸出,stdout)上。 把資料以String的方式顯示就好,一個網址一行,不用顯示資料長度。 重點是必須以命令列參數的順序顯示這些資料。 這個是nodeschool提供的解答, 可以確實輸出資料. https://github.com/workshopper/learnyounode/blob/master/exercises/juggling_async/solution/solution.js 我自己的寫法則是全部都直接蓋, 沒有另外寫成function. 但是用來儲存輸出資料的陣列卻是空的. var http = require('http') var bl = require('bl') var results = [] var count = 0 function printResults () { for (var i = 0; i < 1; i++) console.log(results[i]) } for (var index = 0; index < 1; index++) { http.get(process.argv[2 + index], function (response) { response.pipe(bl(function (err, data) { if (err) return console.error(err) console.log(index) results[index] = data.toString() count++ if (count == 1) printResults() })) }) } 自己嘗試debug的時候, 發現導入的index變數 在要填寫資料進入陣列時 "results[index] = data.toString()" 他的數值已經變成1, 於是資料填到不正確的長度上... 可否幫我檢查一下, 我這樣子更動程式碼所會造成的問題嗎? 非常感謝. -- @@> -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.101.44 ※ 文章網址: https://www.ptt.cc/bbs/Ajax/M.1445826727.A.3C7.html

10/26 11:52, , 1F
再取出index之前他就已經是1了,js是非線程執行。
10/26 11:52, 1F

10/26 11:55, , 2F
不是很理解...@@? 為什麼跑進去http.get後就變1
10/26 11:55, 2F

10/26 11:55, , 3F
請問可否提供一些資料讓我讀一下...Orz
10/26 11:55, 3F

10/26 11:59, , 4F
http.get是非同步,for迴圈不會wait
10/26 11:59, 4F

10/26 12:01, , 5F
你加入node.js台灣 FB社團,我有轉貼你的問題
10/26 12:01, 5F

10/26 12:13, , 6F
OK 感謝:)
10/26 12:13, 6F
文章代碼(AID): #1MBP2dF7 (Ajax)
文章代碼(AID): #1MBP2dF7 (Ajax)