如何解决父函数中的一个函数不会异步运行
很抱歉无法提供有效的代码,但愚蠢的是,我有一个函数调用世界,还有两次调用外部astar路径查找器脚本的函数。我一直在移动await的实例,然后几天又几天来解决,而我movePlayer(journeyPart2)
等不及await movePlayer(journeyPart1)
完成。我也看了无数关于诺言的视频,但看不到我要去哪里错了。我也尝试仅在for循环到达其最后一个实例时才返回某些东西,但这没有用。我真的希望对我要出错的人很明显。不幸的是,第二个movePlayer函数需要花费可变的时间才能完成,所以我不能单独使用设置的时间间隔来对第二个movePlayer函数进行排队。
我实际上不需要从movePlayer
函数返回任何数据,但我知道至少必须返回诺言。如何使第二个movePlayer
函数等待?
编辑:请注意,else if
可以正常工作,因为movePlayer
仅被调用一次。
function movePlayer(journey) {
return new Promise((resolve,reject) => {
for (let i = 0; i < journey.length; i++){
(function(i){
window.setTimeout(function(){
let nextX = journey[i].y;//?SWITCHED X AND Y AS ASTAR SWITCHES IN GRAPH
let nextY = journey[i].x;//?SWITCHED X AND Y AS ASTAR SWITCHES IN GRAPH
let fromTop = (26 + (nextX * 16) + (nextY * 16)) + "px";
let fromLeft = (576 + (nextX * 32) - (nextY * 32)) + "px";
document.getElementById("playerLayer").style.left = fromLeft;
document.getElementById("playerLayer").style.top = fromTop;
},i * (900));
}(i));
}
resolve("complete")
reject("failure")
})
}
function globalPathFindANDMove(cellNumEnd,levelNumEnd) {
let cellNumStart = playerInfo.cellNow;
let levelNumStart = playerInfo.levelNow;
let j1Complete = false;
if (levelNumStart != levelNumEnd) {
(async function(){
try {
let journeyPart1 = await localPathFind(cellNumStart,undefined,levelNumStart)
let journeyPart2 = await localPathFind(undefined,cellNumEnd,levelNumEnd)
let useless = await movePlayer(journeyPart1)
console.log(useless)
movePlayer(journeyPart2)//this function won't wait until the function above completes
//------------------------------------------------------changePlayerLevel (levelNumEnd);-----------------------CREATE LATER
} catch (err) {
}
})();
} else if (levelNumStart == levelNumEnd) {
let journey = localPathFind(cellNumStart,levelNumEnd);
movePlayer(journey);
}
}
解决方法
很难确定要在代码中做什么,但是我认为您只想等setTimeout
部分运行后再解决:
function movePlayer(journey) {
return new Promise((resolve,reject) => {
for (let i = 0; i < journey.length; i++){
(function(i){
window.setTimeout(function(){
let nextX = journey[i].y;//?SWITCHED X AND Y AS ASTAR SWITCHES IN GRAPH
let nextY = journey[i].x;//?SWITCHED X AND Y AS ASTAR SWITCHES IN GRAPH
let fromTop = (26 + (nextX * 16) + (nextY * 16)) + "px";
let fromLeft = (576 + (nextX * 32) - (nextY * 32)) + "px";
document.getElementById("playerLayer").style.left = fromLeft;
document.getElementById("playerLayer").style.top = fromTop;
if (i === journey.length - 1) {
resolve("complete")
}
},i * (900));
}(i));
}
})
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。