New `game.import` uses `document.currentScript` to determine the code caller.
If the script is not `game.js`, we put the result to `_status` for `game.js` to wait, otherwise return the promise directly.
Originally `gnc.await` would call `gnc.await` internally, so now merging the contents of `gnc.await` into `gnc.async` will definitely cause issues.
We will continue to change the `await` logic in `gnc.async` into a callback function, but at this point we only care about the outermost Promise. After the inner Promise finishes handling the asynchronous data, we no longer create nested Promise objects, we just call the callback function again. This also avoids potential performance losses from multi-layered Promises.
The name `gnc.async` was originally paired with `gnc.await`, intended to correspond to the `async` and `await` in` JavaScript`. However, having the same name as keywords in the standard library made the meaning of these two functions unclear on our side. The intention of `gnc.async` is to transform generator functions into `genCoroutine`, so it should contain the meaning of "creating". With simple discussion, we decided to use `of` for now to represent "creating" a `genCoroutine`.
The original intention of `gnc.escape` was to tell `gnc.await` not to handle generator functions that have gone through this function. In fact, no one uses this function at all, because there would never be a situation where a normal function returns a generator function when `genCoroutine` is needed. Now that `gnc.await` has been removed from the project, there is even less need for `gnc.escape` to exist.