看板 Ajax 關於我們 聯絡資訊
各位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
y2468101216: 再取出index之前他就已經是1了,js是非線程執行。 10/26 11:52
yuhow: 不是很理解...@@? 為什麼跑進去http.get後就變1 10/26 11:55
yuhow: 請問可否提供一些資料讓我讀一下...Orz 10/26 11:55
y2468101216: http.get是非同步,for迴圈不會wait 10/26 11:59
y2468101216: 你加入node.js台灣 FB社團,我有轉貼你的問題 10/26 12:01
yuhow: OK 感謝:) 10/26 12:13