Использование throw в выражении Javascript - PullRequest
12 голосов
/ 03 марта 2012

Вот что я хочу сделать:

var setting = process.env.SETTING || throw new Error("please set the SETTING environmental variable");
                                     ^^^^^

Но интерпретатор жалуется на «Синтаксическая ошибка: неожиданный выброс токена».

Есть ли способ вызвать исключение вта же строка, что мы сравниваем, является ли значение ложным или нет?

Ответы [ 7 ]

18 голосов
/ 03 марта 2012

throw является оператором, а не выражением, поэтому вы не можете использовать его как часть другого выражения.Вы должны разделить это:

var setting = process.env.SETTING;
if (!setting) throw new Error("please set the SETTING environmental variable");
14 голосов
/ 03 марта 2012

Вы можете использовать функциональную природу JavaScript:

var setting = process.env.SETTING || 
               function(){ 
                 throw "please set the SETTING environmental variable";
               }();
// es201x
var setting = process.env.SETTING || 
              (() => {throw `SETTING environmental variable not set`})();

или более универсальный, создайте функцию для выдачи ошибок и используйте это:

function throwErr(mssg){
    throw new Error(mssg);
}

var setting = process.env.SETTING || 
               throwErr("please set the SETTING environmental variable");
2 голосов
/ 12 апреля 2018

Существует черновое предложение для введения выражений броска (аналогично выражениям броска C # 7 ) для JavaScript / ECMAScript:

Предложение TC39: выражения броска

1 голос
/ 27 ноября 2018

просто оберните его скобками

{throw ...}

или оберните его с помощью функции (ведьма фактически оборачивает его в фигурные скобки)

()=>{throw ..}
//or:
function(){throw..}
1 голос
/ 18 ноября 2013

Я вижу, что вы используете nodejs.

Я думаю, что лучший способ проверить входные параметры - это утверждение.NodeJS имеет встроенный модуль простого утверждения: http://nodejs.org/api/assert.html

И используйте его, например, так:

var assert = require('assert');

// ...

function myFunction (param) {
    assert(param, 'please pass param');
    // ...
}

Для тестовой среды вы можете сделать это следующим образом:

require('assert')(process.env.setting, 'please set the SETTING environmental variable');

Или:

;(function (a) {
    a(process.env.setting, 'please set the SETTING environmental variable');
    a(process.env.port, 'please set the PORT environmental variable');
}(require('assert')));
1 голос
/ 03 марта 2012

throw не имеет возвращаемого значения.Таким образом, вы не можете использовать это так.Однако вы можете обернуть бросок в функцию.Это будет работать тогда.Но найти источник исключения будет сложнее.

0 голосов
/ 11 февраля 2017
const getenv = require('getenv');
const setting = getenv('SETTING');

Если SETTING не существует, вы получите:

… getenv.js:14
throw new Error('GetEnv.Nonexistent: ' + varName + ' does not exist ' +
^ Error: GetEnv.Nonexistent: SETTING does not exist and no fallback value provided.

Кстати, мой опыт подсказывает, что значения по умолчанию для переменных среды являются злыми.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...