JavaScript函数顺序执行问题:Promise使用无效求助
问题解决:让函数在异步操作完成后执行
你的代码核心问题是:Promise没有等待delayGreet内部的setTimeout执行完成就直接resolve了,导致.then()里的函数会立刻运行,完全起不到延迟等待的效果。
下面是修正后的代码:
function delayGreet() { // 将delayGreet改造为返回Promise的函数 return new Promise((resolve) => { setTimeout(() => { greet(); resolve(); // 等greet执行完毕后,再标记Promise完成 }, 1000); }); } function greet() { para1.textContent = "Hi there!"; } function dontDoUntilDelayIsComplete() { para2.textContent = "Please dont do before"; } function callMethod() { delayGreet().then(dontDoUntilDelayIsComplete); } callMethod();
关键修改说明:
- 让
delayGreet返回Promise对象,把setTimeout包裹在Promise内部 - 在
setTimeout的回调里,先执行greet,再调用resolve(),确保只有当延迟操作完成后,Promise才会进入resolved状态,.then()里的目标函数才会触发执行
如果习惯更直观的写法,也可以用async/await语法实现:
function delayGreet() { return new Promise((resolve) => { setTimeout(() => { greet(); resolve(); }, 1000); }); } function greet() { para1.textContent = "Hi there!"; } function dontDoUntilDelayIsComplete() { para2.textContent = "Please dont do before"; } async function callMethod() { await delayGreet(); // 等待delayGreet的异步操作完成 dontDoUntilDelayIsComplete(); } callMethod();
内容的提问来源于stack exchange,提问作者gbrother54
相关产品推荐
相关产品推荐

