0

我是第一次用 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

4

2 回答 2

2

它与异步无关,变量赋值不是那样工作的。elementtitleCase函数的局部变量,因此执行该赋值不会在函数之外产生任何影响。您需要返回一个值:

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); 
于 2013-06-17T00:56:30.110 回答
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)

希望它会有所帮助

于 2013-06-17T01:05:49.183 回答