Promiseawaitccはよく似ているが、call/ccは処理を止めず、Promiseは再実行できない awaitは現在の継続を与えられたPromiseの後に接続するだけであって、継続をユーザに露出するわけではない awaitの挙動をcall/ccで真似ることはできそうだが逆は無理そう JavaScript Scheme こんな記事があった

ts

let p = new Promise((resolve) => {
  console.log("promise called", resolve);
  // @ts-ignore
  window.resolve = resolve;
});
 
(async () => {
  console.log("before await")
  console.log(await p);
  console.log("after await")
})()
// before await を表示して処理を中断
 
window.resolve(42)
// 42
// after await // 中断されていた処理が再開される
// undefined
window.resolve(53)
// undefined // 2回目以降は何も起こらない

scheme

(define resolve #f)
(define (p c)
	(print "promise called")
	(print c)
	(set! resolve c))

gosh> (begin
    (print "before call/cc")
    (print (call/cc p))
    (print "after call/cc"))
;before call/cc
;promise called
;#<subr "continuation">
;#<subr "continuation">
;after call/cc
;#<undef>
;処理は最後まで実行される

gosh> resolve
#<subr "continuation">

gosh> (resolve 42)
42
after call/cc
#<undef>
;再度実行される

gosh> (resolve 53)
53
after call/cc
#<undef>
;何度でも実行される