javascript - UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝 id:3):
问题描述
我是新来的等待。我只是不知道如何处理所有等待错误和拒绝。总是有来自 shopify-api.js 函数的未处理拒绝,我无法打印来自我创建 index.js 的中间件的所有错误?
如何打印所有错误?我在等待正确处理吗?
index.js
const functions = require('firebase-functions');
const app = require('express')();
const cors = require('cors');
// Automatically allow cross-origin requests
app.use(cors({ origin: true }));
const asyncMiddleware = fn => (req, res, next) => {
Promise.resolve(fn(req, res, next))
.catch((err) => {
console.error(err);
res.json(err)
})
.catch(next)
};
app.get('/v1/Test/Shopify', asyncMiddleware ( async (req, res, next) => {
req.params.workshopId = "TEST_CR"
req.params.date = "2018-11-30"
req.params.startTime = "11:00"
let result1 = await ShopifyWorkshop.AddDate(req, res, next)
console.log("ShopifyWorkshop.AddDate: Success" .green)
res.status(200).json({message: "Success"})
}));
exports.AddDate = async (req, res, next) => {
await Helper.CheckParamsIsNull(req.params)
let wsId = req.params.workshopId
let wsDate = req.params.date
let wsTime = req.params.startTime
// Check if workshop is a level
if (Helper.IsWorkshopType(wsId)) {
return await Promise.all(WORKSHOP_TYPE[wsId].levelNames.map( async (typeName) => {
WORKSHOP_CATEGORY[typeName].codeNames.map( async (codeName) => {
for (let wsId in WORKSHOP_INFO) {
if (WORKSHOP_INFO[wsId].codeName === codeName) {
addVariant(wsId, wsDate, wsTime)
}
}
})
}))
} else if (Helper.IsWorkshopCategory(wsId)) {
return await Promise.all(WORKSHOP_CATEGORY[wsId].codeNames.map ( async (codeName) => {
for (let wsId in WORKSHOP_INFO) {
if (WORKSHOP_INFO[wsId].codeName === codeName) {
await addVariant(wsId, wsDate, wsTime)
}
}
}))
} else {
return await addVariant(wsId, wsDate, wsTime)
}
}
shopify-api.js
exports.AddAProductVariant = async (id, options) => {
console.log("Adding variant to product..." + options.option1)
let result = await shopify.productVariant.create(id, options)
console.log("Added product variant: " + options.option1)
return result
}
解决方案
在行中
async (typeName) => {
WORKSHOP_CATEGORY[typeName].codeNames.map( async (codeName) => {
…
})
}
您正在创建一系列承诺,但随后忽略它们。在它们周围添加另一个Promise.all
包装器,以便能够将所有它们的承诺返回到外部map
:
(typeName) => {
return Promise.all(WORKSHOP_CATEGORY[typeName].codeNames.map( async (codeName) => {
// ^^^^^^^^^^^^^^^^^^
…
}))
}
推荐阅读
- visual-studio - VS 2019有新版多语言APP吗?
- hadoop - 如何为开源 apache-haoop 集成/安装 Beeline UI 编辑器
- html - 如何让列表出现在悬停时?
- javascript - 我可以将我的 React.Component 子类添加到 ESLint 规则吗?
- elixir - 地图中的长生不老药map_values?
- elasticsearch - 如何允许在 Kibana 内/从 Kibana 进行编辑
- docker - 为什么有些 docker 文件是复制文件而不是作为卷挂载
- sql - 跟随开始和结束日期列
- python - 如何使用带有省略号的下一个按钮使用 Scrapy 抓取数据
- vue.js - 如何在 Vuetify 中将 v-flex 元素彼此移开?