var p = new Promise((resolve, reject) => {
//这里的参数若是thenable的,规范有提到加入job队列,必然是异步的
//但是比如参数是数字,在返回promise之前,就已经修改了它的状态,这样似乎是同步的了
resolve(3);
});
console.dir(p.[[state]]);
上面这段代码是同步的么?即,如果有p.[[state]]
,那么应该打印出fulfilled
,而不是pendding
。
p.then
方法里面的回调函数是异步的这个应该没问题
这里是同步的无疑。
你的这段代码的确是同步的,有个简单的办法验证
看看上面的代码是不是先打出'in'?这就说明new Promise的resolve、reject执行是同步的,想变成异步可以像下面这样写:
另外,
then
的执行的确是异步的,也可以用类似的方法验证。顺带一说,Promise有个常用的pattern,将同步结果包装成Promise,消除同步和异步调用的区别: