我编写了一个简单的函数,一旦完成打印出某个字符串就会触发回调函数。在按照我的方式构建回调时,我应该注意哪些警告?
另外,如果原始函数受异步性影响,最好的方法是什么?
代码:
// Output via console
var message = "hello there";
function typeOut(message, callback = null, i = 0) {
var interval = setInterval(function() {
if (i < message.length) {
console.log(message.substring(0, i + 1));
i++;
} else {
clearInterval(interval);
callback();
}
}, 150);
//callback;
}
function postDialog() {
console.log('this is postdialog');
}
typeOut(message, postDialog);
小提琴 Here
答案 0 :(得分:1)
两个警告:
() => {}
作为默认值。调用时,这将不可避免地抛出异常。要么使用默认值,要求调用者提供函数,要么使用不执行任何操作的函数(例如i
)作为默认值。i
参数也是可选的,这可能并非易事。我能想到的潜在解决方法:
typeof
成为参数 - 无论如何你还没有使用它。此外,在一个真实世界的用例中,您可以使用#34; animate&#34;一个DOM节点,它可以为动画节点添加一个常量前缀。i
第二个参数决定其callback
还是function delay(ms) {
return new Promise(res => setTimeout(res, ms));
}
async function typeOut(message, i = 0) {
while (i < message.length) {
await delay(150);
i++;
console.log(message.slice(0, i));
}
}
var message = "hello there";
typeOut(message).then(function postDialog() {
console.log('this is postdialog');
});
。但这确实很乏味。总的来说,在现代代码库中编写新代码的建议当然是使用promises 而不是回调!他们将处理上述两个问题:
(?<!a)b