Node.js的,蓝鸟,执行路径控制不佳 [英] node.js, bluebird, poor control of execution path
本文介绍了Node.js的,蓝鸟,执行路径控制不佳的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想学习蓝鸟;因为我想我没有控制的执行。 (这个问题蓝鸟从async.js问题就在 Node.js的,异步模块,并发一>)
I'm trying to learn bluebird; I'm not controlling execution as I want to. (This bluebird question came from an async.js question at Node.js, async module, concurrency.)
下面是一些code,再加上我的预期得到什么我吧。
Here's some code, plus what I expected to get and what I got instead.
问题:
- 为什么#3函数的#1和#2两个功能(1)在年底前开始,和(2)的第一个错误检查功能?
- 是什么原因造成的错误?
- 发生了什么事code结束?
var Promise = require('bluebird')
function part1() {
console.log('part1 start')
return new Promise(function(resolve, reject) {
Promise.all(
[ part1a(1),
part1a(2)
])
.then(
function(err) {
if (err) console.log('part1 error after #1 and #2')
else console.log('part1 done with #1 and #2')
}
)
.then(part1a(3))
.then(
function(err) {
if (err) console.log('part1 error after #3')
else console.log('part1 done')
}
)
})
}
function part1a(i) {
console.log('part1a start #' + i)
return new Promise(function(resolve, reject) {
setTimeout(function() {
console.log('part1a done #' + i)
return resolve()
}, 100)
})
}
part1()
.then(
function(err) {
if (err) console.log('outermost code reported error' + err.message)
else console.log('end of code')
}
)
我的预期。
part1 start
part1a start #1
part1a start #2
part1a done #1 // these two could
part1a done #2 // reverse
part1 done with #1 and #2
part1a start #3
part1a done #3
part1 done
end of code
我
part1 start
part1a start #1
part1a start #2
part1a start #3
part1a done #1
part1a done #2
part1a done #3
part1 error after #1 and #2
part1 done
问题解答(重复方便读者):
Questions (repeated for reader convenience):
- 为什么#3函数的#1和#2两个功能(1)在年底前开始,和(2)的第一个错误检查功能?
- 是什么原因造成的错误?
- 发生了什么事code结束?
先谢谢了。
推荐答案
这是因为您的来电 part1a(3)
不是在一个函数包裹,所以它得到正确的叫走,而不是等待previous有望得到解决:
It's because your call to part1a(3)
is not wrapped in a function so it's get called right away instead of waiting the previous promises to be resolved:
function part1() {
console.log('part1 start')
// then() returns a promise so no need to create a new Promise
return Promise.all([part1a(1), part1a(2)])
.then(function (err) {
if (err) console.log('part1 error after #1 and #2')
else console.log('part1 done with #1 and #2')
})
// the issue was here, part1a() is a promise
.then(function () {
return part1a(3)
})
.then(function (err) {
if (err) console.log('part1 error after #3')
else console.log('part1 done')
})
}
function part1a(i) {
console.log('part1a start #' + i)
return new Promise(function (resolve, reject) {
setTimeout(function () {
console.log('part1a done #' + i)
return resolve()
}, 100)
})
}
part1().then(function (err) {
if (err) console.log('outermost code reported error' + err.message)
else console.log('end of code')
})
这篇关于Node.js的,蓝鸟,执行路径控制不佳的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文