我无法理解为什么Firefox说:" TypeError:fadeIn_1(...)未定义" 和Chrome说" Uncaught TypeError:无法读取属性'然后'未定义"使用此代码:
function fadeIn_1(cpt) {
cpt = cpt + step;
if (cpt < 500) {
console.log("cpt = " + cpt);
setTimeout(function() {
fadeIn_1(cpt);
}, ticks);
} else {
console.log("cpt = " + cpt);
return new Promise(function(resolve, reject) {
resolve("Succeed");
console.log("THE END. Ticks = " + ticks);
});
}
}
var cpt = 1;
var step = 10;
var TimeDuration = 500; // ms
var ticks = 15; // Duration.
fadeIn_1(cpt).then(function() {
console.log('Promise executed !');
});
&#13;
我想要的结果:&#34;承诺执行&#34;在控制台中。
提前感谢您的帮助
答案 0 :(得分:0)
您应该始终确保您的功能具有一致的回报。在这种情况下,您的函数要么返回一个promise,要么返回undefined。让它总是通过promisifying setTimeout返回一个承诺。
function promisifiedSetTimeout(delay) {
return new Promise(function(resolve) {
setTimeout(resolve, delay);
});
}
function fadeIn_1(cpt) {
cpt = cpt + step;
if (cpt < 500) {
console.log("cpt = " + cpt);
return promisifiedSetTimeout(ticks).then(function() {
return fadeIn_1(cpt);
});
} else {
console.log("cpt = " + cpt);
console.log("THE END. Ticks = " + ticks);
return Promise.resolve("Succeed");
}
}
var cpt = 1;
var step = 10;
var TimeDuration = 500; // ms
var ticks = 15; // Duration.
fadeIn_1(cpt).then(function() {
console.log('Promise executed !');
});
因为我们将fadeIn_1
的下一次通话发送到超时的.then
,所以它会进一步延迟原始.then
,直到它们全部完成。