Выгода попытки JavaScript игнорирует ожидаемую случайную ошибку плохая практика?

Вы можете добавить следующий код в конец кода в событии onclick_btnExportToExcel. Кроме того, удалите строку, которая показывает сообщение, поскольку браузер будет обрабатывать отображение соответствующего сообщения о загрузке.

//get full physical path of file including its name
string fullFileName =  Request.PhysicalApplicationPath + fileName; 

//read contents of file at above location and modify Response header 
//so browser knows response is not html but a csv file content
byte[] Content= File.ReadAllBytes(fullFileName);  
Response.ContentType = "text/csv";
Response.AddHeader("content-disposition", "attachment; filename=" + fileName + ".csv");
Response.BufferOutput = true;
Response.OutputStream.Write(Content, 0, Content.Length);
Response.End();
6
задан scunliffe 26 September 2008 в 19:42
поделиться

6 ответов

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

if(   myInfo && newInfo 
      && myInfo.person && newInfo.person
      && myInfo.person.address && newInfo.person.address
      && ( myInfo.person.name == newInfo.person.name
           && myInfo.person.address.street == newInfo.person.address.street
           && myInfo.person.address.zip == newInfo.person.address.zip
         )
) 
{
     this.setAddress(newInfo);
} 

Это делает эффект намного более ясным - например, предположите, что newInfo все заполнен, но части myInfo отсутствуют? Возможно, Вы на самом деле хотите, чтобы setAddress () был назван в этом случае? Если так, необходимо будет изменить ту логику!

4
ответ дан 17 December 2019 в 00:17
поделиться

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

2
ответ дан 17 December 2019 в 00:17
поделиться

Я думал бы, что, если Вы собираетесь поймать исключение затем, делают что-то с ним. Иначе позвольте ему пузырь, таким образом, более высокий уровень может обработать его в некотором роде (даже если это - просто браузер, сообщая об ошибке Вам).

1
ответ дан 17 December 2019 в 00:17
поделиться

Для примера, учитывая я сказал бы, что это была плохая практика. Существуют экземпляры однако, где может быть более эффективно просто захватить для ожидаемой погрешности. При проверке формата строки прежде, чем бросить его, поскольку GUID был бы хорошим примером.

-1
ответ дан 17 December 2019 в 00:17
поделиться

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

function pathEquals(obj1, obj2, path)
{
    var properties = path.split(".");
    for (var i = 0, l = properties.length; i < l; i++)
    {
        var property = properties[i];
        if (obj1 === null || typeof obj1[property] == "undefined" ||
            obj2 === null || typeof obj2[property] == "undefined")
        {
            return false;
        }

        obj1 = obj1[property];
        obj2 = obj2[property];
    }

    return (obj1 === obj2);
}

if (pathEquals(myInfo, newInfo, "person.name") &&
    pathEquals(myInfo, newInfo, "person.address.street") &&
    pathEquals(myInfo, newInfo, "person.address.zip"))
{
    this.setAddress(newInfo);
}
0
ответ дан 17 December 2019 в 00:17
поделиться

На связанной ноте, в IE, даже при том, что спецификации говорят, Вы можете, Вы не можете использовать комбинацию попытки/наконец. Для Вашего "наконец" для выполнения необходимо было определить блок выгоды, даже если это пусто.

//this will [NOT] do the reset in Internet Explorer
try{
  doErrorProneAction();
} finally {
  //clean up
  this.reset();
}

//this [WILL] do the reset in Internet Explorer
try{
  doErrorProneAction();
} catch(ex){
  //do nothing
} finally {
  //clean up
  this.reset();
}
1
ответ дан 17 December 2019 в 00:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: