扫码关注官方订阅号
为什么then中的回调函数不会执行呢
可以打印出resolve,但就是不执行then中的内容,为什么呢
认证高级PHP讲师
看你的代码是想用递归判断,如果到达某个距离就resolve。但是有一个问题,每次递归都返回一个 new promise是全新的,与最开始的那个promise没有任何关系,所以第一个promise永远不会被resolve。解决办法很简单,保持引用一个promise就行了。
resolve
new promise
promise
function animate (ball, distance){ return new Promise(function(resolve, reject){ function timeout(ball,distance){ //再加个函数包裹递归就不会影响Promise setTimeout(function(){ let marginLeft = parseInt(ball.style.marginLeft); if(marginLeft === distance){ console.log("resolve") resolve(); }else{ if(marginLeft < distance){ marginLeft++; }else{ marginLeft--; } ball.style.marginLeft = marginLeft+"px"; timeout(ball, distance); } },13) } timeout(ball,distance); }) };
不解释,看代码:
function animate (ball, distance){ return new Promise(function(resolve, reject){ function ant() { let marginLeft = parseInt(ball.style.marginLeft); if(marginLeft === distance){ console.log("resolve"); resolve(); }else{ if(marginLeft < distance){ marginLeft++; }else{ marginLeft--; } ball.style.marginLeft = marginLeft+"px"; start(); } } function start() { setTimeout(function(){ ant(); },13) } start(); }) };
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
看你的代码是想用递归判断,如果到达某个距离就
resolve。但是有一个问题,每次递归都返回一个new promise是全新的,与最开始的那个promise没有任何关系,所以第一个promise永远不会被resolve。解决办法很简单,保持引用一个
promise就行了。不解释,看代码: