jQuery Terminal输入动画后提示符(>)不显示的问题
执行
eth_atr_d9命令后提示符“>”不显示的问题解决 问题现象
- 执行
eth_atr_d9命令时,echo文本能正常打印,但命令提示符“>”消失;不过仍可输入其他命令且功能完全正常 - 仅该命令存在此问题,其余6个命令均正常
- 本地环境及codepen.io均能复现该问题
- 尝试修改文本长度,问题依旧
相关代码
eth_atr_d9: function() { this.echo('Entering... ', { typing: true, delay: 10 }); this.echo('Text1', { typing: true, delay: 30 }); this.echo('Text2', { typing: true, delay: 30 }); }
问题原因
核心问题在于echo的打字机效果(typing: true)是异步执行的,命令执行完毕后,提示符的渲染逻辑没有等待所有异步echo操作完成,导致提示符被后续的打字机输出覆盖,或者没有触发重新渲染。
解决方案
方案一:利用回调函数等待所有输出完成后触发提示符
eth_atr_d9: function() { const self = this; this.echo('Entering... ', { typing: true, delay: 10 }, () => { self.echo('Text1', { typing: true, delay: 30 }, () => { self.echo('Text2', { typing: true, delay: 30 }, () => { self.prompt(); // 手动调用提示符渲染方法 }); }); }); }
方案二:用Promise+async/await统一处理异步输出
eth_atr_d9: async function() { // 封装echo为Promise,等待打字机效果完成 const echoWithTyping = (text, opts) => { return new Promise(resolve => { this.echo(text, { ...opts, callback: resolve }); }); }; await echoWithTyping('Entering... ', { typing: true, delay: 10 }); await echoWithTyping('Text1', { typing: true, delay: 30 }); await echoWithTyping('Text2', { typing: true, delay: 30 }); this.prompt(); // 所有输出完成后渲染提示符 }
这两种方法都是确保所有打字机效果的输出完成后,再手动触发提示符的渲染,彻底解决异步操作导致的提示符丢失问题。
内容的提问来源于stack exchange,提问作者Bhavy Garg
相关产品推荐
相关产品推荐

