javascript - 同步while循环javascript
问题描述
我想要这个输出 1,1,1,....
而不是 2,1
我想同步运行
//just wait 2 seconds
function s(callback){
setTimeout(() => {
callback()
}, 2000);
}
a=[2]
while (a.length!==0){
a.shift()
s(()=>{
a.push(2)
console.log('1');
})
}
console.log('2');
解决方案
使用当前代码实现此目的的一种方法是使用async/await
和 Promises。
//just wait 2 seconds
function s(callback) {
return new Promise(resolve => {
setTimeout(() => {
callback()
resolve()
}, 2000);
})
}
const main = async function() {
const a = [2];
while (a.length !== 0) {
a.shift()
// This "waits" for s to complete. And s returns a Promise which completes after 2 secs
await s(() => {
a.push(2)
console.log('1');
})
}
console.log('2');
}
main()
如果你真的只需要一个无限循环while(true) { /* ... */ }
就足够了。
推荐阅读
- linux - KDE (KIO) 下 TransferJob 的 HTTP 错误代码
- python - 有没有办法获取 jupyter notebook 的绝对文件路径?
- sql - 每天插入和更新 400 万条记录
- java - ModelMapper 错误地映射到嵌套对象属性
- python - 如何在不刷新的情况下正确呈现页面中数据库中的字段?
- graphql - 如何修复 EntitySchema 中一对一关系的“无法读取未定义的属性 'joinColumns'”错误
- azure-devops - 如何使用 LogicApps 等工具读取 AzureDevOps 工作项?
- sql - 使用 Python psycopg2 安排查询
- python - beautifulsoup:从字段中提取所有文本,而不是以“...”结尾的文本?
- c# - Blazor 父组件能否知道其中有多少子组件?