提问者:小点点

Javascript的promise说他们完成了,而实际上他们没有完成


这是我第一次用承诺。

我有一个浏览器游戏,在开始之前必须加载一些东西。 一大堆变量和类之类的东西让游戏正常工作,一些Pixi精灵的图像,一些预先计算,还有一个到服务器的连接等等。 以后的代码所依赖的一切。

我已经将所有的加载封装到两个承诺中。

var promise1 = new Promise(function(resolve, reject) { ...loading stuff here... resolve() });
var promise2 = new Promise(function(resolve, reject) { ...loading stuff here... resolve() });

然后我在下面放了一个启动游戏循环的函数

Promise.all([promise1, promise2]).then(setInterval(GameLoop, time));

问题是,尽管所有东西都启动并运行良好,但在所有东西加载之前,它仍然会抛出四帧错误。 我以为承诺应该等到里面的代码发挥作用。

我真的不知道哪里出了问题。 可能我错过了一些关于javascript的基本内容。 浏览器没有抛出任何错误,除了在开始时找不到4-5帧的一个变量。 我的脑子痒痒的。 我想修好它。 请帮忙。

PS,最初我打算简单地为必须加载的每一位代码提供一个bool,然后轮询所有的书,直到它们都为true,然后放弃该函数并启动循环。 但是,我在什么地方读到那是个坏主意。


共2个答案

匿名用户

你需要写:

Promise.all([promise1, promise2]).then(() => setInterval(GameLoop, time));

否则,您将立即开始间隔,而不是等待所有承诺首先完成。

匿名用户

SetInterval正在立即执行。 尝试将该代码放在传递给的函数中。然后:

Promise.all([promise1, promise2]).then(() => setInterval(GameLoop, time));