我是第一次使用Node.js构建应用程序,对异步函数有点困惑。我越来越认识到什么时候因为异步而无法正常工作,但仍然不确定如何解决它。
这是我的功能:
function titleCase(element){
var string = element.replace(/([^\W_]+[^\s-]*) */g, function(txt){
return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
})
element = string;
}
var 1 = "UPPER CASE"; var2 = "lower case"; var3 = "MiXeD CaSe";
titleCase(var1);
titleCase(var2);
titleCase(var3);
console.log(var1 + " " + var2 + " " + var3);
}
(该函数应该带一个字符串并给它标题大小写。)
目前代码运行时,我得到了
UPPER CASE lower case MiXeD CaSe
很明显console.log
正在titleCase
函数正常触发之前发生。我知道一个解决方案是不使用该函数,只为每个变量调用字符串替换3次,但我想学习异步执行。
实现这一目标的最佳方法是什么,以确保console.log
函数仅在所有3个titleCase
函数完成后才会触发?
答案 0 :(得分:2)
它与异步无关,变量赋值不起作用。 element
是titleCase
函数的局部变量,因此执行该赋值对函数外没有任何影响。您需要返回一个值:
function titleCase(element) {
return element.replace(/([^\W_]+[^\s-]*) */g, function(txt) {
return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
});
}
var var1 = "UPPER CASE";
var var2 = "lower case";
var var3 = "MiXeD CaSe";
var1 = titleCase(var1);
var2 = titleCase(var2);
var3 = titleCase(var3);
console.log(var1, var2, var3);
答案 1 :(得分:1)
Node.js是一种在服务器端使用JavaScript以通过事件处理程序处理请求的方式(请求是一个事件)。
您的代码块与它无关。好像你到目前为止错过了这个概念。
但是要运行您的示例,请尝试:
function titleCase(txt){
return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
}
var var1 = "UPPER CASE"; var2 = "lower case"; var3 = "MiXeD CaSe";
var1 = titleCase(var1);
var2 = titleCase(var2);
var3 = titleCase(var3);
console.log(var1 + " " + var2 + " " + var3);
请注意js中没有“通过引用传递”功能,所以你应该使用像
这样的结构var1 = titleCase(var1)
而不是
titleCase(var1)
希望它会有所帮助