recherche

Maison  >  Questions et réponses  >  le corps du texte

javascript - Un petit doute sur Promise

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

Le code ci-dessus est-il synchrone ? Autrement dit, s'il y a p.[[state]],那么应该打印出fulfilled,而不是pendding.

p.thenLa fonction de rappel dans la méthode est asynchrone, donc ça devrait aller

为情所困为情所困2834 Il y a quelques jours486

répondre à tous(2)je répondrai

  • 我想大声告诉你

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

    C'est sans aucun doute synchronisé.

    répondre
    0
  • 曾经蜡笔没有小新

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

    Votre code est bien synchronisé, il existe un moyen simple de le vérifier

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

    Regardez le code ci-dessus. Est-ce qu'il tape « in » en premier ? Cela signifie que l'exécution de la résolution et du rejet de la nouvelle Promise est synchrone. Si vous souhaitez la rendre asynchrone, vous pouvez l'écrire comme suit :

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

    De plus, l'exécution de then est effectivement asynchrone et peut être vérifiée en utilisant une méthode similaire.

    À propos, Promise a un modèle couramment utilisé, qui intègre les résultats de synchronisation dans Promise pour éliminer la différence entre les appels synchrones et asynchrones :

    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))

    répondre
    0
  • Annulerrépondre