Skip to content

Instantly share code, notes, and snippets.

@bao-qian
Last active October 19, 2018 19:25
Show Gist options
  • Save bao-qian/cc8d8b0b46a7477e2e917514a051ed57 to your computer and use it in GitHub Desktop.
Save bao-qian/cc8d8b0b46a7477e2e917514a051ed57 to your computer and use it in GitHub Desktop.
recursion await vs promise
function delay(t, v) {
return new Promise(function(resolve) {
setTimeout(resolve.bind(null, v), t)
});
}
function f1(count = 10) {
console.log('f1', count)
let p = delay(10).then(() => {
if (count > 0) {
return f1(count - 1)
} else {
return count
}
})
return p
}
async function f2(count = 10) {
console.log('f2', count)
await delay(10)
if (count > 0) {
return await f2(count - 1)
} else {
return count
}
}
let r1 = f1()
r1.then((v)=>console.log('then1', v))
let r2 = f2()
r2.then((v)=>console.log('then2', v))
/*
f1 9 debugger eval code:8:5
f2 9 debugger eval code:20:5
f1 8 debugger eval code:8:5
f2 8 debugger eval code:20:5
f1 7 debugger eval code:8:5
f2 7 debugger eval code:20:5
f1 6 debugger eval code:8:5
f2 6 debugger eval code:20:5
f1 5 debugger eval code:8:5
f2 5 debugger eval code:20:5
f1 4 debugger eval code:8:5
f2 4 debugger eval code:20:5
f1 3 debugger eval code:8:5
f2 3 debugger eval code:20:5
f1 2 debugger eval code:8:5
f2 2 debugger eval code:20:5
f1 1 debugger eval code:8:5
f2 1 debugger eval code:20:5
f1 0 debugger eval code:8:5
f2 0 debugger eval code:20:5
then1 0 debugger eval code:30:14
then2 0 debugger eval code:33:14
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment