nodejs 前端 返回数组给_node.js中需要遍历数组并返回值的处理实在是搞不懂了......

promise在定时器执行之前,变成了resolve状态,执行了then的回调输出了b。

然后定时器才超时,将数据放到b里。

应该在定时器全部超时之后在resolve,而不是仅仅在设置完定时器之后直接resolve。

new Promise(function(resolve, reject) {

// code

// resolve(b)

}).then(function(data){

console.log(data);

})

这个promise没有resolve,也没有reject,所以一直是pending,不会console.log。所以我猜测,你应该是忘记去掉resolve这行的注释了。

a.forEach(function(item) {

item.forEach(function(it) {

setTimeout(function () {

b.push(it)

}, 1000);

})

})

resolve(b)

你的promise里面是这些代码,二维数组的遍历。对于这个二维数组的每个元素,设置定时器,这个定时器在1秒后将元素添加到b里。设置完定时器后,promise先resolve了,这个时候还没有到1秒,定时器还没有执行,b还是空数组。而由于你resolve了,所以执行了你then后的语句,这个时候就是你遇到的问题了。

如果你等一会(1秒后)再输出a,其实是你想要的结果的。一秒后,设置的这些定时器超时触发,再向b里push元素。

你想要的结果应该这么写呢?

var a = [[1,2,3],[4,5,6],[7,8,9]]

var b = []

new Promise(function(resolve, reject) {

a.forEach(function(item) {

item.forEach(function(it) {

setTimeout(function (item, it) {

b.push(it)

if(item == a[a.length-1] && it == item[item.length -1]) {

resolve(b);

}

}, 1000, item, it);

})

})

}).then(function(data){

console.log(data);

})

在每个定时器里判断,如果我是二维数组里的最后一个,那么我就resolve。这样就可以了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值