node.js - wrapAsync(...) 不是 MongoDB 和 Mongoose 中的函数

标签 node.js mongodb express mongoose

我正在尝试使用 Mongoose 和 ExpressJS 在 MongoDB 中运行两个异步查询。

exports.get_options_data = function (req, res) {
    var rooms = [];
    var areas = [];


    async.parallel({
        rooms : AddProperty.distinct("roomQty", function (err, data) {
            if (err)
                res.send({ code: '500', message: err });
            rooms = data;
        }),
        areas: AddProperty.distinct("area", function (err, data) {
            if (err)
                res.send({ code: '500', message: err });
            areas = data;
        })
    }, function(err, data){
        res.send({ code: '200', rooms: rooms, areas : areas });
    })
}

为此,我使用异步并行。我已经使用 npm i async 安装了 async。

我想要的是,执行这两个查询并将查询响应作为组合 JSON 一起发送。

但是,当我执行此操作时出现错误:

TypeError: wrapAsync(...) is not a function

另外,有没有更好的方法来做同样的事情?

最佳答案

异步。 parallel 接受函数数组而不是对象。

Node 现在支持 Promise,因此您只需使用 Promise.all作为替代品。您可以使用 util.promisifyAddProperty.distinct 转换为基于 Promise 的函数。

const util = require('util');
const addProperty = util.promisify(AddProperty.distinct);


Promise.all([
    addProperty('roomQty'),
    addProperty('area')
]).then((data){
    res.send({ code: '200', rooms: data[0], areas : data[1] });
}).catch(error => {
   res.send({ code: '500', message: error });
});

关于node.js - wrapAsync(...) 不是 MongoDB 和 Mongoose 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55350965/

相关文章:

node.js - Express.js 不会在后期操作中呈现

node.js - Uncaught Error : spawn .\node.exe ENOENT

javascript - 由外部包导出的 React 和 Webpack 渲染组件

node.js - 区分其他模块中的node master集群

mongodb - 删除除第一个索引之外的 mongodb 数组键

ruby - 如何验证嵌入字段是否在 before_save 上发生了变化?

express - Passport-auth0 访问accessToken

node.js - engine.io 和 socket.io 有什么区别?

node.js - 使用 Sharp 在不改变图像纵横比的情况下压缩图像大小

node.js - 我想在对象数组中进行搜索