Heim > Fragen und Antworten > Hauptteil
P粉6330757252023-08-19 13:31:19
在这里,你的addPost不是一个promise函数。这就是为什么当你写了"await addPost"时,它看起来像是重新初始化了变量addPost。为了使它工作,你需要调用promise函数。这样,在你调用之后它将执行promise工作。
以下是你修改过的代码
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();
如果这对你来说清楚,请告诉我。
谢谢
P粉7703754502023-08-19 13:07:09
当你使用new Promise()
创建一个promise时,它会立即开始运行。你可以通过在控制台中运行类似于new Promise(() => { console.log("hello") })
的代码来测试这一点 - 你应该立即看到一个日志。
你可以通过定义一个返回新Promise的函数来实现你想要的行为。这样,只有在调用该函数时,你的promise才会运行,而每次函数调用都会返回一个不同的Promise。
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();