我做了以下的回圈,我在其中回圈了一個陣列;然后為每個陣列做了一個快速的GET請求。
我使該回圈作業,資料被正確記錄。然而,這個 "回圈 "從未完成,因此沒有達到 ().then => {}
Promise.all(
arr.map((key,item) => {
return new Promise((resolve,reject) => {
var costmicro = 0;
request.post({
url: 'https://googleads.googleapis.com/v8/customers/' arr[item] '/googleAds:searchStream'。
headers: {
'Content-Type': 'application/json',
},
json: {
"query": "SELECT metrics.cost_micros FROM campaign WHERE segments.date DURING LAST_30_DAYS" ,
}
}, function (errAdsCampaign, httpResponseAdsCampaign, bodyAdsCampaign) {
if (! errAdsCampaign) {
for (ii in bodyAdsCampaign[0].results) {
costmicro = costmicro parseInt(bodyAdsCampaign[0). results[ii].metrics['costMicros'])。)
var arrlength = bodyAdsCampaign[0].results.length-1;
if (ii == arrlength) {
objectArray.push({name: arr[item], cost: costmicro / 1000000}) 。
resolve(objectArray)。
}
}
} else {
reject()。
}
});
});
})
).then(()=> {
console.log('done')。
console.log(objectArray)
}).catch(() => {
console.error。
});
更新 替換了catch()函式。像這樣;可悲的是它從未回傳錯誤,也從未完成過
}).catch((e) => //span> {
console.error(e)。
});
非常感謝您的任何幫助!
uj5u.com熱心網友回復:
在你的回圈內部的函式中,你需要考慮到所有可能的退出路徑,并呼叫resolve()或reject()。一個不被處理的退出路徑是如果bodyAdsCampaign[0].results是一個空陣列或未定義。在這種情況下,該函式將完成運行而不呼叫resolve()或reject()。
你也可以在你的函式(errAdsCampaign, httpResponseAdsCampaign, bodyAdsCampaign)回呼函式的末尾添加對reject()的呼叫,以捕捉所有沒有在函式內處理的情況。
uj5u.com熱心網友回復:
你在回圈中的代碼很可能出現了錯誤,它跳過了.then()子句而進入了.catch()子句。你可以用下面的代碼替換.catch()子句,看看遇到的是什么錯誤。
}).catch((e) => //span> {
console.error(e)。
});
uj5u.com熱心網友回復:
庫request已被棄用。參考。https://www.npmjs.com/package/request
相反,我建議使用axios。
(async function run() {
try {
const objectArray = await Promise.all(
arr.map(async (key, item) => {
const res = await axios.post(
"https://googleads.googleapis.com/v8/customers/"
arr[item]
"/googleAds:searchStream"。
{
json: {
query:
"SELECT metrics.cost_micros FROM campaign WHERE segments.date DURING LAST_30_DAYS" ,
},
},
{
headers: {
'Content-Type': 'application/json', 。
},
}
);
const costmicro = res.data.bodyAdsCampaign. results.reduce((acc, cur) =>/span> {
acc = cur.metrics["costMicros"/span>]。
return acc;
}, 0)。)
return { name: arr[item], cost: costmicro / 1000000 };
})
);
console.log(objectArray)。
} catch (err) {
console.log(err)。
}
})();
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/318065.html
標籤:
