Javascript 承诺和诱惑带来的麻烦
昨天我开始学习React,在承诺方面遇到了一些麻烦Javascript 承诺和诱惑带来的麻烦,javascript,Javascript,昨天我开始学习React,在承诺方面遇到了一些麻烦 var p1=新承诺((解决、拒绝)=>{ 设置超时(()=>{ 决议(3) }, 2000); }) p1 .然后(()=>{ 设置超时(()=>{ //第一街区 log(“已执行此操作”) }, 1000) }) .然后(()=>{ //第二街区 log(“此块也被执行”); }) 使用下面的代码,如何首先执行第一个块,然后执行第二个块?函数p1(){ 返回新承诺((解决,拒绝)=>{///添加返回 设置超时(()=>{ 决议(3) },
var p1=新承诺((解决、拒绝)=>{
设置超时(()=>{
决议(3)
}, 2000);
})
p1
.然后(()=>{
设置超时(()=>{
//第一街区
log(“已执行此操作”)
}, 1000)
})
.然后(()=>{
//第二街区
log(“此块也被执行”);
})
使用下面的代码,如何首先执行第一个块,然后执行第二个块?函数p1(){
返回新承诺((解决,拒绝)=>{///添加返回
设置超时(()=>{
决议(3)
}, 2000);
})
}
或者使用es6
const p1=()=>{
返回新承诺((解决,拒绝)=>{///添加返回
设置超时(()=>{
决议(3)
}, 2000);
})
}
您需要在第一个块中返回承诺,然后在块中返回承诺
var p1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(3)
}, 2000);
})
p1
.then(() => {
return new Promise((resolve, reject) => {
setTimeout(() => {
// First block
console.log("This was executed.")
resolve();
}, 1000)
}
})
.then(() => {
// Second block
console.log("This block is executed too.");
})
它已首先执行第一个块
由于setTimeout的异步性质,它将在此处执行下一个调用,然后()。
要执行第一个块,您必须添加一个承诺
var p1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(3)
}, 2000);
});
function firstCall() {
return new Promise((resolve) => {
setTimeout(() => {
console.log("This was executed.");
resolve(true)
}, 1000);
})
}
p1
.then(firstCall)
.then(() => {
// Second block
console.log("This block is executed too.");
})
return
从第一个块返回是的,刚刚注意到。。。编辑应该是正确的,谢谢@Utkanoscan你能解释原因吗?then
中的代码是异步的,因此如果你想让第二个then
等待setTimeout
解决,那么你需要告诉它像第一次函数调用那样做。