javascript - 在 NodeJS (Express) 中使用 Promise.all 找不到集合时出现 404 页面
问题描述
我在多个 Mongo 集合中使用Promise.all()
并询问 URL。
我意识到缺少一些 URL。
因此,在这种情况下,我有一个 404 页面。如何避免这种情况(通常是使用 Annonce 集合)?我可以用什么代替Promise.all
?
const express = require('express');
const mongoose = require('mongoose');
const { ensureAuthenticated } = require('../helpers/auth');
const router = express.Router();
require('../models/Car');
const Car = mongoose.model('cars');
require('../models/Caratio');
const Caratio = mongoose.model('caratios');
require('../models/User');
const User = mongoose.model('users');
require('../models/Annonce');
const Annonce = mongoose.model('annonces');
router.get('/app/:cars_getroute', ensureAuthenticated, (req, res) => {
Promise.all([Car.findOne({ cars_getroute: req.params.cars_getroute }),
Caratio.findOne({ cars_getroute: req.params.cars_getroute }),
Annonce.findOne({ cars_getroute: req.params.cars_getroute })])
.then(result => {
let [cars, caratios, annonces] = result;
}
解决方案
正如 Rafi 所说,只要一个 promise 失败Promise.all
,它就会被拒绝。
您可以替换Promise.all
为Promise.allSettled
,这样被拒绝的承诺不会影响(或停止)其他承诺。
Promise.allSettled() 方法返回一个在所有给定的 Promise 都已解决或被拒绝后解决的 Promise,并带有一组对象,每个对象都描述每个 Promise 的结果。
请记住,这Promise.allSettled
是相当新的,IE 或 Edge 以及其他浏览器的旧版本不支持。
兼容性表
推荐阅读
- openshift - 在 OpenShift HAProxy 中,如何限制每个后端/路由的连接?
- swift - 即使已注册,以编程方式创建的 NSCollectionView `makeItem` 返回 nil
- javascript - 使用 Javascript 从 firefox 浏览器扩展中获取剪贴板内容
- javascript - window.showModalDialog 返回值在 localhost 中未定义,但在服务器中部署时正在工作
- php - 帖子不起作用,Bindparam 问题
- apache-spark - 运行火花提交时树节点异常
- docker - VSTS 中的 Docker Compose 任务:无法在 http+docker://localhost 连接到 Docker 守护程序 - 它正在运行吗?
- ios - 将 UIPanGestureRecognizer 速度添加到 UIViewPropertyAnimator
- javascript - Promise 对象内的 setTimeout
- database - 如何让 Postgres 使用受信任的 SSL 证书对另一个 Postgres 数据库进行 dblink