以下代码:
public class ComplexObject {
private String a;
private String b;
...
private String z;
//getters and setters
}
运行该命令时,我得到以下输出(对我来说这没有意义)
Promise.resolve('a string')
.then(resp => {
console.log('resp from the initial promise: ' + resp)
const p0 = new Promise((resolve, reject) => {
setTimeout(() => {
console.log('finished sleeping in p0')
resolve('hello from p0')
}, 5000)
})
console.log('returning p0')
return p0
})
.then(resp => {
console.log('resp from p0: ' + resp)
const p1 = new Promise((resolve, reject) => {
console.log('p1 completed')
// resolve('another string from p1')
})
console.log('returning p1')
return p1
})
.then(res => {
console.log('resp from p1: ' + res)
})
.catch(err => {
console.error('Error: ' + err.message)
})
console.log('last statement')
首先,由于承诺last statement
resp from the initial promise: a string
returning p0
finished sleeping in p0
resp from p0: hello from p0
p1 completed
returning p1
从未得到解决,所以我希望程序永远等待,永远不会完成。情况并非如此,并且可以很好地完成(尽管没有到达最后一个p1
)。
此外,它还会创建promise,并在promise中的之前内执行代码。我希望“返回p1”会在 “ p1完成”之前出现,因为我认为承诺中的内容将在下一个刻度执行。
答案 0 :(得分:2)
此外,它还会创建promise,并在promise创建之后的代码之前执行promise中的代码。我希望“返回p1”会在“ p1完成”之前出现,因为我认为承诺中的内容将在下一个刻度执行。
如果您按承诺调用.then
,则传入的功能将延迟到下一个刻度。但是,promise的构造函数的行为并不如此。构造new Promise
时,传递给构造函数的代码将立即同步运行。所以这段代码:
const p0 = new Promise((resolve, reject) => {
setTimeout(() => {
console.log('finished sleeping in p0')
resolve('hello from p0')
}, 5000)
})
console.log('returning p0')
...将立即设置超时,甚至在将承诺分配给p0
之前。这段代码:
const p1 = new Promise((resolve, reject) => {
console.log('p1 completed')
// resolve('another string from p1')
})
console.log('returning p1')
...将立即注销“ p1完成”,甚至没有将承诺分配给p1
。