Javascript 承诺和诱惑带来的麻烦

Javascript 承诺和诱惑带来的麻烦,javascript,Javascript,昨天我开始学习React,在承诺方面遇到了一些麻烦 var p1=新承诺((解决、拒绝)=>{ 设置超时(()=>{ 决议(3) }, 2000); }) p1 .然后(()=>{ 设置超时(()=>{ //第一街区 log(“已执行此操作”) }, 1000) }) .然后(()=>{ //第二街区 log(“此块也被执行”); }) 使用下面的代码,如何首先执行第一个块,然后执行第二个块?函数p1(){ 返回新承诺((解决,拒绝)=>{///添加返回 设置超时(()=>{ 决议(3) },

昨天我开始学习React,在承诺方面遇到了一些麻烦

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
解决,那么你需要告诉它像第一次函数调用那样做。