javascript - Sedikit keraguan tentang Janji
为情所困
为情所困 2017-05-19 10:36:01
0
2
450
 var p = new Promise((resolve, reject) => {  
     //这里的参数若是thenable的,规范有提到加入job队列,必然是异步的
     //但是比如参数是数字,在返回promise之前,就已经修改了它的状态,这样似乎是同步的了
     resolve(3);
 });
 console.dir(p.[[state]]);

Adakah kod di atas segerak? Iaitu, jika ada p.[[state]],那么应该打印出fulfilled,而不是pendding.

p.thenFungsi panggil balik dalam kaedah adalah tak segerak, jadi ia sepatutnya baik

为情所困
为情所困

membalas semua(2)
我想大声告诉你

Ini sudah pasti disegerakkan.

曾经蜡笔没有小新

Kod anda ini memang disegerakkan, ada cara mudah untuk mengesahkannya

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

Lihat kod di atas adakah ia menaip 'masuk' dahulu? Ini bermakna azam dan penolakan pelaksanaan Janji baharu adalah serentak Jika anda ingin menjadikannya tidak segerak, anda boleh menulisnya seperti berikut:

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

})
console.log(p)

Selain itu, pelaksanaan then sememangnya tidak segerak dan boleh disahkan menggunakan kaedah yang serupa.

Dengan cara ini, Promise mempunyai corak yang biasa digunakan, yang membungkus hasil penyegerakan ke dalam Promise untuk menghapuskan perbezaan antara panggilan segerak dan tak segerak:

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))
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan