2013-06-17 5 views
0

Я создаю приложение с Node.js в первый раз и немного запутался в асинхронных функциях. Я лучше узнаю, когда что-то не сработает из-за асинхронности, но все же не уверен, как исправить это.Javascript - Выполнение функции асинхронно

Вот моя функция:

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 раза для каждой переменной, но я хочу научиться делать это асинхронно.

Каков наилучший способ достичь этого, чтобы функция ТОЛЬКО ТОЛЬКО срабатывала после того, как все функции 3 titleCase были выполнены?

ответ

2

Это не имеет никакого отношения к async, назначение переменной не работает. 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

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) 

Надеюсь было бы полезно

Смежные вопросы