我正在努力了解Promises和Promise Chaining。 根据我的理解,以下代码必须打印'你好!'到控制台。但是,事实并非如此。 任何人都可以解释为什么会发生这种情况以及正确的方法是什么?
function func01() {
console.log('func01');
return new Promise(function(){
console.log('promise');
setTimeout(function(){
console.log('st');
return 'hello !'
},5000);
}).then(function(data){
console.log('then01');
return data;
});
}
function func02() {
console.log('func02');
return func01().then(function(data){
console.log('then02');
return data;
})
}
function func03() {
console.log('func03');
func02().then(function(data){
console.log('then03');
console.log(data);
});
}
func03();
答案 0 :(得分:1)
resolve
承诺将其传递给当时。 setTimeout
是异步调用,不会考虑返回该函数(Per @jcaron)。结合这些,你走了:
function func01() {
console.log('func01');
return new Promise(function(resolve, reject){
console.log('promise');
resolve( 'hello !' )
}).then(function(data){
console.log('then01');
return data;
});
}
function func02() {
console.log('func02');
return func01().then(function(data){
console.log('then02');
return data;
})
}
function func03() {
console.log('func03');
func02().then(function(data){
console.log('then03');
console.log(data);
});
}
func03();