我有一組 id,我需要為每個 id 向另一個微服務發送請求,這需要很多時間。是否可以并行執行?代碼看起來像這樣
const ids = [1,2,3,4]
const objects = await Promise.all(ids.map(id => this._getData(id)))
uj5u.com熱心網友回復:
JavaScript 并發一般
您將任何 IO 操作放在 JavaScript 事件佇列上,然后等待所有這些操作解決,只要有一些您可以收聽的回呼即可。
Promise.all()
網路呼叫就是這樣一種 IO 操作。對于大多數 HTTP 請求庫 或fetch,您將在創建請求時獲得 Promise 。Promise.all在您的示例中,您可以使用來等待您創建的任意數量的請求完成。因此,鑒于您的_getData函式回傳一個 Promise,這應該可行,是的。
如果您預計其中一些_getData呼叫會失敗,那么您可以使用Promise.allSettled()和處理基于status屬性的結果。
更多閱讀
您可以閱讀 Promises 和 JavaScript 并發模型(事件回圈)以更清楚地理解這一點。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all
https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop
uj5u.com熱心網友回復:
app.param('user', function (req, res, next, id) {
// try to get the user details from the User model and attach it to the request object
User.find(id, function (err, user) {
if (err) {
next(err)
} else if (user) {
req.user = user
next()
} else {
next(new Error('failed to load user'))
}
})
})
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/367250.html
標籤:javascript 节点.js 表达
