promise难道不是异步的?

为什么运行的结果是cdab而不是cabd

function a(){console.log("a");}
function b(){console.log("b");}
new Promise(function(resolve,reject){
    console.log("c");
    resolve(22);
}).then(console.log("d"));
a();
b();

// 运行结果
c
d
a
b
阅读 2.8k
6 个回答

你把then里的内容修改一下再试试:

.then(()=>{
    console.log('d');
})

then方法接收的参数是Function类型

new Promise((resolve,reject) => {
    console.log("c"); 
    resolve("d")
 })
   .then(res => {
    console.log(res)
 })
a();
b();

then 应该接受一个function 啊;
这里直接将console.log("d")的结果undefined作为它的回调,这个注册的过程当然是同步的;
不要将then方法误解为异步方法,then的回调才是异步的;
then方法会立即返回一个新的promise对象,此时这个新的promise对象就已经有了then的回调,并且等待上一个promise状态从pending改变后执行回调

promise是ES6的新对象,最主要是为了解决回调地狱,解决异步待来的问题的,

大哥 你的代码哪有异步的地方哦

因为你的代码中,并没有异步代码。
promise不是异步代码,而是解决异步回调的问题,所以回配合异步代码使用。
promise本身并不存在异步行为。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题