为什么在dbs调用之后没有保存数组变量 - 节点js

时间:2016-08-17 18:07:16

标签: javascript node.js mongodb mongoose

我有一个可以保存Cat信息的模式。然后我想创建一个包含所有cat_urls的数组,但是当我在dbs调用之外调用数组时,数组是空的

var cat_urls = [];

Cat.find(function (err, data) {
    var stringify = JSON.stringify(data)
    content = JSON.parse(stringify);
    content.forEach(function (result) {
        cat_urls.push(result.cat_url);
    })
    console.log(cat_urls, 'here')
})

console.log(cat_urls, 'here not working') // I want cat_urls to also be populated here

所以在Cat.find()调用中,cat_urls的值如下:

[ 'www.hello.co.uk', 'www.testing.co.uk' ] 'here'

但在cat_urls = []

之外

我想这与节点js不按特定顺序运行这一事实有关,但我该如何解决这个问题呢?

1 个答案:

答案 0 :(得分:1)

我认为它正常工作但你的find函数会返回一个异步解析的承诺。

尝试:

var cat_urls = [];

Cat.find(function (err, data) {
    var stringify = JSON.stringify(data)
    content = JSON.parse(stringify);
    content.forEach(function (result) {
        cat_urls.push(result.cat_url);
    })
    console.log(cat_urls, 'here')
}).then(function(){
  // Promise has completed, now this console log will trigger only after the cat's names are pushed.
  console.log(cat_urls);
})