2016-07-18 3 views
0

У меня есть приложение nodeJS с использованием драйвера mssql для взаимодействия с моей базой данных SQL. Я хочу иметь одну функцию для получения значения из базы данных, однако при первом использовании таблица не будет существовать, поэтому, если есть определенная ошибка, я хочу вызвать функцию createValue(). Ниже приведен код, но я должен его дважды вызвать, чтобы получить значение. В принципе, если выполнено условие в .catch, я хотел бы снова позвонить Request. Есть ли опрятный способ сделать это?Retise Promise при ошибке - Typcript

var value; 
new sql.Request().query('select * from _table') 
    .then(function (recordset) { 
     value = recordset; 
    }) 
    .catch(function (err) { 
     console.log("Query Error: " + err); 
     if (err.message == "Invalid object name '_table") { 
      createValue(); 
     } 
    }) 

Update:

теперь у меня есть следующие функции, но как я должен лучше получить его, чтобы вернуть recordset?

function getData() { 
    sql.connect("mssql://username:[email protected]/mytestdatabase").then(function() { 
     return new sql.Request().query('select * from _table') 
      .then(function (recordset) { 
       console.log(recordset); // <-- THIS IS WHAT I WANT TO RETURN 
      }) 
      .catch(function (err) { 
       console.log("Query Error: " + err); 
       if (err.message == "Invalid object name '_table") { 
        updateValue(); 
        return getData(); 
       } 
       return null; 
      }) 
    }).catch(function (err) { 
     console.log("Connection Error: " + err); 
    }) 
}; 
+0

Мне нужно повторить обещания, поэтому я посмотрел, что там было, а затем обнаружил, что для TypeScript ничего действительно не существует, поэтому я откатился сам. Обратная связь приветствуется. https://www.npmjs.com/package/retry-promise-typescript –

ответ

1

Вы можете обернуть его в функцию, которую вы можете вызвать рекурсивно. Я предполагаю, что createValue() является синхронным.

function getData(){ 
    return new sql.Request().query('select * from _table') 
    .catch(function (err) { 
     if (err.message == "Invalid object name '_table") { 
      createValue(); 
      return getData(); 
     } 
     throw err; 
    }); 
} 

... 

var resultsetPromise = getData(); 
resultsetPromise.then(function(resultset){ 
    // do something with your data 
}).catch(function(err){ 
    console.log("Query Error: " + err); 
}); 
+0

Спасибо за это, это действительно полезно, но как я могу вернуть набор записей? См. Мой обновленный вопрос –

+0

Я обновил свой код, чтобы показать вам, как получить/использовать набор записей – memimomu