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.
Originally, `gnc.await` was separated out from `gnc.async` to handle standalone `genCoroutine` generator functions. However, as the project developed, we realized this didn't make much sense and instead added unnecessary mental overhead for developers to focus on the APIs rather than the content. Therefore, we've now moved the functionality that was part of `gnc.async` back into `gnc.async`.
we noticed that `gnc.await` has almost no logically sound use cases in practice. We shouldn't add error handling for generator functions that haven't been transformed into `genCoroutine`. Functions that need `genCoroutine` should judge the input parameters by themselves.
By the way, this commit only remove the method without any change of the code which use `gnc.await`. In that case, there must be error in the code.