Rumah > Soal Jawab > teks badan
P粉6330757252023-08-19 13:31:19
Di sini, addPost anda bukan fungsi janji. Itulah sebabnya apabila anda menulis "tunggu addPost" nampaknya pembolehubah addPost dimulakan semula. Agar ini berfungsi, anda perlu memanggil fungsi janji. Dengan cara ini ia akan melaksanakan kerja janji selepas anda memanggilnya.
Berikut ialah kod anda yang diubah suai
const posts = [{ title: 'Post 1' }, { title: 'Post 2' }]; var count = 3; const diffFunction = async () => { const addPost = () => new Promise((resolve, reject) => { setTimeout(() => { posts.push({ title: `Post ${count}` }); count++; resolve(count); }, 1000) }); const deletePost = () => new Promise((res, rej) => { setTimeout(() => { const deltedPost = posts.pop(); res(deltedPost); }, 2000) }); const showDetails = () => { posts.forEach(element => { console.log(element.title); }); } await addPost(); await addPost(); showDetails(); } diffFunction();
Jika ini jelas kepada anda, sila beritahu saya.
Terima kasih
P粉7703754502023-08-19 13:07:09
Apabila anda menggunakan kod new Promise()
创建一个promise时,它会立即开始运行。你可以通过在控制台中运行类似于new Promise(() => { console.log("hello") })
untuk menguji ini - anda sepatutnya melihat log dengan serta-merta.
Anda boleh mencapai tingkah laku yang anda inginkan dengan menentukan fungsi yang mengembalikan Janji baharu. Dengan cara ini, janji anda hanya akan dijalankan apabila fungsi dipanggil, dan setiap panggilan fungsi akan mengembalikan Janji yang berbeza.
const posts = [{ title: 'Post 1' }, { title: 'Post 2' }]; var count = 3; const addPost = () => new Promise((resolve, reject) => { setTimeout(() => { posts.push({ title: `Post ${count}` }); count++; resolve(count); }, 1000) }) const deletePost = () => new Promise((res, rej) => { setTimeout(() => { const deltedPost = posts.pop(); res(deltedPost); }, 2000) }) const showDetails = () => { posts.forEach(element => { console.log(element.title); }); } const diffFunction = async () => { await addPost(); await addPost(); showDetails(); } diffFunction();