请教一个赋值的问题

2017-01-07 20:49:22 +08:00
 dantegg

` 如何给 tempArray 赋值然后返回,现在总是返回一个空数组

        let tempArray = []; 
        news.toArray((err,items)=>{
            items.map(x=>{
                tempArray.push({
                    "title":x.title,
                    "content":x.content,
                    "createTime":x.createTime
                })
            })
        })
        return tempArray
2005 次点击
所在节点    JavaScript
9 条回复
rogerchen
2017-01-07 20:58:57 +08:00
news 是什么, toArray() 是什么库的方法,签名是什么。
dantegg
2017-01-07 21:00:20 +08:00
@rogerchen
news 就是从 mongodb 里查出来的记录
collection.find().toArray((err,items)=>{})
这样的
haozhang
2017-01-07 21:13:22 +08:00
你这个回调函数还没执行呢就返回了 array ,然后你取值的时候可能回调还没执行,所以不会有值的。
rogerchen
2017-01-07 21:15:38 +08:00
虽然代码槽点很多,但语法上确实看不出什么问题来。
你打一个 log 看看 items 的长度吧,应该是逻辑上的问题。
dremy
2017-01-07 21:19:44 +08:00
根据第一项参数是 err 基本可以判定是异步的函数,在函数没有执行的时候就把空数组给返回了
dantegg
2017-01-07 21:35:48 +08:00
自己解决了
用 Promise.all
结贴了
dantegg
2017-01-07 21:37:29 +08:00
@rogerchen 求指正,槽点都有哪些=。=|||
rogerchen
2017-01-07 21:42:00 +08:00
@dantegg
map 本身就要返回一个新数组,可以直接用来构建新数组。
如果想要遍历数组,也该用 forEach 。
vcfvct
2017-01-08 13:21:04 +08:00
@haozhang 是呀,一语中的!楼主先多理解理解 js 中的 callback 和 event loop 是怎么回事。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/332937

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX