Maison > Questions et réponses > le corps du texte
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.then
La fonction de rappel dans la méthode est asynchrone, donc ça devrait aller
曾经蜡笔没有小新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))