如何使用Mongoose将model.findOne()的查询结果保存到变量中
解决mongoose中model.findOne()返回pending Promise的问题
你遇到的问题是因为Product.findOne()是异步操作,它会立刻返回一个处于pending状态的Promise,此时数据库查询还没完成,所以直接打印变量只能看到未完成的Promise。
下面是两种可行的解决方式:
方式一:使用async/await(推荐,代码更易读)
async function fetchProduct() { // await会等待Promise完成,把查询结果赋值给key let key = await Product.findOne({ name: 'keyboard' }); console.log(key); // 在这里把key传给其他函数使用 yourOtherFunction(key); } // 调用这个async函数 fetchProduct();
注意:await必须放在标记了async的函数内部使用,不能直接在全局作用域使用(除非是ES模块的顶层await场景)。
方式二:在.then回调中处理结果
Product.findOne({ name: 'keyboard' }).then(data => { let key = data; console.log(key); // 直接在回调里调用其他函数使用key yourOtherFunction(key); });
这种方式是利用Promise的回调机制,当数据库查询完成后,会自动执行then里的回调函数,此时data就是最终的查询结果。
内容的提问来源于stack exchange,提问作者user19359397
相关产品推荐
相关产品推荐

