Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何调用mongoosefind函数以数组形式获取所有文档?_Javascript_Mongoose_Async Await_Es6 Promise_Mutability - Fatal编程技术网

Javascript 如何调用mongoosefind函数以数组形式获取所有文档?

Javascript 如何调用mongoosefind函数以数组形式获取所有文档?,javascript,mongoose,async-await,es6-promise,mutability,Javascript,Mongoose,Async Await,Es6 Promise,Mutability,我还是Node.js和Mongoose的新手,不知道为什么这段代码不返回数组。有什么建议吗 函数全部(数组){ 数组=card.cards.find({},(err,items)=>{ 数组=项 返回数组 }) } 设arr=[] 全部(arr) 控制台日志(arr) 最终结果只是一个空数组。您不需要传入数组,您可以返回由.find()方法返回的项 你有两个问题 1.无法重新分配作为函数内参数传递的变量: var a=1; 功能fn(b){ b=2; } fn(a); a===1;//真的

我还是Node.js和Mongoose的新手,不知道为什么这段代码不返回数组。有什么建议吗

函数全部(数组){
数组=card.cards.find({},(err,items)=>{
数组=项
返回数组
})
}
设arr=[]
全部(arr)
控制台日志(arr)

最终结果只是一个空数组。

您不需要传入数组,您可以返回由.find()方法返回的项

你有两个问题

1.无法重新分配作为函数内参数传递的变量:
var a=1;
功能fn(b){
b=2;
}
fn(a);
a===1;//真的
另外,在函数中不需要数据时,对其进行变异也是一种不好的模式。最好在外部范围内返回并分配:

function all(){
返回card.cards.find({});
}
全部(a).然后(console.log);//[...]
但您可以在不重新分配的情况下变异数组:

var a=[1,2,3];
函数fn(数组){
拼接(0,无穷大,[5,6,7,8]);
}
a、 //[1, 2, 3]
fn(a);
a、 //[5, 6, 7, 8]
2.对Mongoose和Async wait/promises的异步调用 即使您从函数
all
返回该值,也必须等待结果

对mongoose方法的调用是异步的。这意味着它们返回承诺对象(或承诺),实现与方法
的接口,然后
catch
。如果promise将被成功解析,则传递给
然后
方法的函数将被调用;如果promise将被拒绝,则将调用
catch
中的函数

例如

函数p(){
if(Math.random()>0.5){
返还承诺。决议(1);
}否则{
返回承诺。拒绝(新错误('2'));
}
}
p()
.then(函数(结果){/*将在解析分支的一半时间内被调用*/})
.catch(函数(错误){/*将为拒绝分支*/}调用)
此代码类似于,但使用语法糖:

异步函数p(){ if(Math.random()>0.5)返回1;//类似于返回Promise.resolve(1); 抛出新错误('2');//类似于返回承诺。拒绝(新错误('2')) }
要在异步函数中等待承诺,有一个
await
关键字

异步函数all(){
试一试{
返回等待卡。查找({});
}捕获(错误){
if(false/*以某种方式处理猫鼬错误*/){
//检查错误,如果db未准备好,请重试或执行其他操作
// …
}
//如果我们做不到的话,就再做一次
投掷误差;
}
}

阅读有关async Wait的更多信息:

这是否回答了您的问题?另外,将参数名称重新指定给新数组对传入的数组没有任何影响。您的代码无法运行,因为您仍然没有返回结果。正确答案是
函数getAll(){return card.cards.find({});}
function getAll(){
    card.cards.find({})
         .then(items => {
             return items 
         }
         .catch(err => {
             console.log(err)
         }
}