suchen

Heim  >  Fragen und Antworten  >  Hauptteil

javascript – Ein kleiner Zweifel an Promise

 var p = new Promise((resolve, reject) => {  
     //这里的参数若是thenable的,规范有提到加入job队列,必然是异步的
     //但是比如参数是数字,在返回promise之前,就已经修改了它的状态,这样似乎是同步的了
     resolve(3);
 });
 console.dir(p.[[state]]);

Ist der obige Code synchron? Das heißt, wenn es p.[[state]],那么应该打印出fulfilled,而不是pendding gibt.

p.thenDie Rückruffunktion in der Methode ist asynchron, daher sollte es kein Problem geben

为情所困为情所困2832 Tage vor480

Antworte allen(2)Ich werde antworten

  • 我想大声告诉你

    我想大声告诉你2017-05-19 10:38:01

    这里是同步的无疑。

    Antwort
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-19 10:38:01

    你的这段代码的确是同步的,有个简单的办法验证

    const p = new Promise((resolve, reject) => {
      console.log('in')
      resolve(3)
    })
    console.log(p)

    看看上面的代码是不是先打出'in'?这就说明new Promise的resolve、reject执行是同步的,想变成异步可以像下面这样写:

    const p = new Promise((resolve, reject) => {
      setTimeout(() => {
        console.log('in')
        resolve(3)
      }, 0)
    
    })
    console.log(p)

    另外,then的执行的确是异步的,也可以用类似的方法验证。

    顺带一说,Promise有个常用的pattern,将同步结果包装成Promise,消除同步和异步调用的区别:

    const addOne = num => Promise.resolve(num + 1)
    const addOneAsync = num => new Promise(resolve => setTimeout(resolve(num + 1), 0))
    
    addOne(1).then(n => console.log(n))
    addOneAsync(1).then(n => console.log(n))

    Antwort
    0
  • StornierenAntwort