实现

代码看起来很简单,这里就直接给出来了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function sleepSort(nums) {
const result = []
return new Promise(resolve => {
for (const num of nums) {
setTimeout(() => {
result.push(num)
if (result.length === nums.length) {
resolve(result)
}
}, num * 100)
}
})
}


sleepSort([4, 1, 3, 2, 9]).then(console.log)
// [ 1, 2, 3, 4, 9 ]

原理

就是说当前数字是多少,就在多少*100毫秒后添加到result数组。不过从这个例子里也能小小练习一下Promise的用法。

这里要乘100的原因是防止几毫秒差别太小被抢占。

同时,得益于Promise,我们在异步函数里可以这样写:

1
2
3
4
5
(async () => {
const data = await sleepSort([4, 5, 3, 6, 8])
console.log(data)
// [ 3, 4, 5, 6, 8 ]
})()

Just for fun.