2016-04-18 59 views
0

我正在使用http請求庫got。使用這個軟件包,http連接是異步的,快速且容易輸出。 「got」cha是got是一個promisified包,這給我帶來了幾個挑戰。一個是我不知道如何傳遞給got的引用。如何使用單個回調異步排隊和執行多個promise?

我需要做的是使用got與文件流一起下載幾個網址的頁面內容。完成所有這些流,我想繼續在代碼中。

在這個例子中,我沒有創建一個promise數組,而是得到一個響應對象數組。

const getFile = (fileUrl) => { 
    return new Promise((resolve) => { 
    got.stream(fileUrl).pipe(fs.createWriteStream(path.basename(fileUrl))) 
    .on('finish',() => { 
     successMessage('downloaded ' + fileUrl + '!'); 
     resolve(); 
    }); 
    }); 
}; 

// create an array of these got promises 
let promises = [] 
for (let file of body.files) { 
    promises.push(getFile(file)); 
} 


getFile幫手之所以存在,是來包裝got的承諾,以便執行所有got S的後,我可以用一個promise.all電話:

// after all got's have executed 
promises.all(promises).then(() => { 
    console.log('all promises resolved'); 
} 

尋求幫助瞭解如何更改第一個片段,以便promises.all的行爲如預期。

+2

它是'Promise.all(承諾)',但除此之外,你的代碼應該工作。什麼是錯誤? – Bergi

+1

我想你剛剛發現了Bergi的bug。我會在有人來之前發佈這個答案,並竊取您賺取的優質互聯網點! – Acey

+0

@Bergi你應該作爲一個完整的答覆,它爲我工作,你值得這個正確的答案。謝謝! –

回答

1

Promise彙總功能稱爲Promise.all()而不是promises.all()

相關問題