我有一個函數可以創建三個數組中的一個數據庫對象。數組填充在每個循環中,其中一個數組依賴於循環的相同迭代中的值。使用承諾/回調等待功能在javascript中完成
依賴數組使用requests庫和cheerio庫來獲取一個字符串來填充該數組。
目前依賴數組填充空值,我認爲是因爲循環沒有等待請求返回。
我仍然在學習,並希望得到這個沒有直接阻斷工作,以保持異步的東西,所以我尋找到的諾言/回調。
這是服務器端完成的,但從我在cheerios文檔中看到的沒有承諾能力。
這是我到目前爲止。 (getFile()是不填充'c'數組的函數,它也取決於將當前值放入'b')。我知道getFile函數通過控制檯日誌測試獲得正確的值,所以問題必須在填充'c'的實現中。
addToDB()是保存一個值的MongoDB,從測試中我知道,對象是正確被放入一個數據庫中的功能,只是C數組是不正確的。
function getInfo(path) {
$(path).each(function(i,e) {
a.push(...)
b.push(value)
c.push(getFile(value))
})
var entry = new DB...//(a,b,c)
addToDB(entry);
}
function getFile(...) {
request(fullUrl, function (err, resp, page) {
if (!err && resp.statusCode == 200) {
var $ = cheerio.load(page); // load the page
srcEp = $(this).attr("src");
return srcEp;
} // end error and status code
}); // end request
}
我一直在閱讀有關的承諾/回調,然後(),但我還沒有找到任何事情的作品。
我假設'addToDB()'是你的異步操作的地方。如果是這樣,那麼對於我們來幫助你解決這個問題,你將不得不顯示該代碼。這就是真正需要改變的地方。 – jfriend00
addToDB只是一個函數,它使用已經填充並保存的數組。所以它會有:var objectToMake = new ...然後保存在它下面(通過mongodb)objectToMake.save,異步我相信(仍然學習js,不知道這是否是問題)是數組c是沒有被填充,那就是每個循環都沒有等待getFile完成 – user147910
你的異步操作在哪裏?你還等什麼完成?你的問題是等待某件事完成,但沒有說明要等待什麼操作(並顯示該操作的代碼)。如果您有異步操作,承諾只能幫助您解決問題。否則,同步操作只需按順序運行。 – jfriend00