首页 > 解决方案 > 在 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;
}

标签: javascriptnode.jsexpress

解决方案


正如 Rafi 所说,只要一个 promise 失败Promise.all,它就会被拒绝。

您可以替换Promise.allPromise.allSettled,这样被拒绝的承诺不会影响(或停止)其他承诺。

Promise.allSettled() 方法返回一个在所有给定的 Promise 都已解决或被拒绝后解决的 Promise,并带有一组对象,每个对象都描述每个 Promise 的结果。

请记住,这Promise.allSettled是相当新的,IE 或 Edge 以及其他浏览器的旧版本不支持。
兼容性表


推荐阅读