2013-02-22 5 views
0

У меня есть следующая функция, где я чувствую, что запуск функции иногда вызывается без набора params.name. Я не настолько силен в асинхронных функциях, поэтому мне интересно, может ли это быть так, потому что setName не обязательно возвращается до запуска? И поможет ли он затем вызвать вызов функции внутри тройного в инициализации self.params?Задайте функциональные параметры асинхронным способом

projectLaunch: function(options) { 
    var self = this; 
    if (options.name === null || options.name === "undefined") { 
    var name = self.setName(); 
    } else { 
    var name = options.name; 
    }; 

    self.params = { 
    name: name 
    }; 
    launch(self.params); 
}, 

setName = function() { 
    return encodeBase64(User.name, Project.name) 
} 

Это часть крупного объекта, а функция projectLaunch вызывается извне.

+0

Ваш отредактированный код не компилируется. Можете ли вы создать минимальный рабочий пример, чтобы мы могли искать вашу проблему. –

+0

это: 'options.name === null || options.name === "undefined" 'должно быть следующим:' options.name === null || options.name === undefined', или просто это: 'options.name == null' (double вместо triple' == ') –

+0

Правильно, это тоже опечатка. Я на самом деле проверяю ложность с помощью опции options.name == null. –

ответ

1

Здесь нет ничего асинхронного (у меня нет реализации вашего encodeBase64, но я не понимаю, почему он будет асинхронным).

Но это не назначить функцию на любое имя и не называют его:

function(options) { 
... 
} 

Так launch не может быть вызван из кода, который мы видим.

Если вы хотите сделать IIFE, зафиксировать его как

(function(options) { 
... 
})({}); 

Если вы ожидаете непустой строки в options.name, самое простое решение использовать переданное значение или другой это :

var name = options.name || self.setName(); 
+0

На самом деле ... код странный. Похоже, что он был скопирован из чего-то более сложного ... –

+0

Этот код был ответом на предыдущую версию кода. Я жду определенного вопроса, прежде чем отредактировать свой ответ. –

+0

Ну, это в основном отвечает на мой вопрос. Мне просто нужно было знать, может ли 'setName()' возвращаться после вызова 'launch()'. Если это не так, моя ошибка должна быть где-то в другом месте. –