Вы можете просто объявить что-то в глобальном масштабе, как сказал markmoxx.
Но так как это асинхронный вызов, я думаю, у вас есть проблемы с этой переменной, установленной во времени.
Я рекомендую функцию обратного вызова.
let awsFunc = function( params, cb )
{
docClient.query(params, function(err, data) {
if (err) {
console.error("Unable to read item. Error JSON:", JSON.stringify(err,
null, 2));
cb(false);
} else {
console.log("GetItem succeeded:", JSON.stringify(data, null, 2));
var success = data.Items[0].hash_key;
cb(success);
}
});
}
Тогда вы можете, в другом месте, позвонить:
awsFunc( params, function(success)
{
console.log("How'd it go? " + success);
}
Все они внутренне заканчивают тем, что назвали метод названным InternalGetValueAsString
. Различие между ToString
и GetName
было бы то, что GetName
должен проверить несколько вещей сначала:
GetType
на значении для проверки этого. .ToString
не должен волноваться ни об одном из них выше проблем, потому что это называют на экземпляре самого класса, а не на переданном в версии, поэтому, вследствие того, что .ToString
метод не имеет тех же проблем проверки как статические методы, я пришел бы к заключению, что .ToString
самый быстрый способ получить значение как строку.
Лучше всего я могу найти, этот несвязанный вопрос на MSDN, который содержит отрывок XML, который отвечает на этот вопрос. Любой из этих методов совместно использует тот же дефект: они звонят enum.toString()
, который не работает правильно при использовании Dotfuscation. Другие проблемы, кажется, касаются косвенной упаковки (GetName и Формат). К сожалению, я не могу найти причины производительности использования ни одного вышеупомянутого.
Перефразирование от xml отрывок ,
Передача помещенного в коробку перечисления для строкового представления. Формат () или любая другая функция может привести к
enum.ToString()
называемый. Это вызовет проблемы когда Dotfuscating. Вы не должны использоватьenum.ToString()
,enum.GetNames()
,enum.GetName()
,enum.Format()
илиenum.Parse()
для преобразования перечисления в строку. Вместо этого используйте оператор переключения и также интернационализируйте имена при необходимости.
Enum.GetName()
Format()
действительно просто обертка приблизительно GetName()
с некоторой функциональностью форматирования (или InternalGetValueAsString()
, чтобы быть точным). ToString()
в значительной степени то же как Format()
. Я думаю GetName()
, наилучший вариант, так как полностью очевидно, что это делает для любого, кто читает источник.
Я создаю метод расширения "Описания" и присоединяю его к перечислению так, чтобы я мог получить действительно удобное для пользователя именование, которое включает пробелы и преобразование регистра. Мне никогда не нравилось использовать само перечисление значений в качестве отображаемого текста, потому что это - что-то мы, разработчики используют для создания большего количества читаемого кода. Это не предназначается в целях дисплея UI. Я хочу смочь изменить UI, не проходя и изменяя перечисления на всем протяжении.
Я не знаю то, что "предпочтительный" метод (спросите 100 человек и получите 100 различных мнений), но сделайте то, что является самым простым и что работы. GetName
работы, но требует намного большего количества нажатий клавиш. ToString()
, кажется, делает задание очень хорошо.
ToString()
дает, большинство очевидный следует из перспективы удобочитаемости, в то время как использование Enum.GetName()
требует, чтобы немного больше умственного парсинга быстро поняло то, что его попытку сделать (если Вы не видите шаблон все время).
С точки зрения чистой производительности, как уже обеспечено в ответе @nawfal, Enum.GetName()
лучше.
, Если бы производительность является действительно Вашей целью, хотя, было бы еще лучше обеспечить поиск заранее (использующий Словарь или некоторое другое отображение).
В C++ / CLI, это было бы похоже
Dictionary<String^, MyEnum> mapping;
for each (MyEnum field in Enum::GetValues(MyEnum::typeid))
{
mapping.Add(Enum::GetName(MyEnum::typeid), field);
}
Сравнение с помощью перечисления 100 объектов и 1 000 000 повторений:
Перечисление. GetName: ~800ms
.ToString (): отображение словаря ~1600ms
: ~250ms