GetUnhandledPromiseRejectionWarning в узле js?
Привет, я написал следующий код, который взаимодействует с сервером qliksense и конвертирует файл QVF как json с помощью узла JS. Когда я пытаюсь это сделать, я получаю следующую ошибку.
(node:21220) UnhandledPromiseRejectionWarning: #<ErrorEvent>
(node:21220) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:21220) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
Пожалуйста, найдите приведенный ниже код, который я использую
ipcMain.on('migration:qlik',async(w,options)=>{
try
{
console.log("********************************* Qlik to PBI *****************************")
var options = JSON.parse(options)
console.log(options)
options['application_info'].map((appToBeMig)=>{
qvfToJson.qvfToJson()
.then((certificates)=>{
console.log(certificates)
var server = store.get('qlik_server')
var userDir = store.get('qlik_user_dir')
var userID = store.get('qlik_user_id')
let session = enigma.create({
schema,
url: `wss://${server}}:4747/app/engineData`,
createSocket: url => new WebSocket(url, {
ca: certificates.root,
cert: certificates.cert,
key: certificates.key,
headers: {
'X-Qlik-User': `UserDirectory=${userDir}; UserId=${userID}`
}
}),
})
session.open().then((global) => {
global.openDoc(appToBeMig['app_id']).then((doc)=>{
serializeapp(doc)
.then((appData)=>{
session.close().then(() => console.log("session closed"))
console.log(JSON.stringify(appData))
// resolve(JSON.stringify(appData))
// console.log(appData.properties)
// let data = JSON.stringify(result);
// var appName = utils.cleanString(appData.properties.qTitle);
// fs.mkdir(appName, function(result)
// {
// writeFiles(appData, appName, '527d85fa-f33f-4437-8a91-26d450941e73');
// session.close()
// })
})
});
});
}).catch(function(){console.log("Error")})
})
}
catch(err)
{
console.log(err)
}
})
пожалуйста, помогите мне решить эту проблему
1 ответ
Решение
У вас происходит много странных вещей, например, использование
async
в комбинации с
.then()
Я попытался очистить код с помощью
async / await
ipcMain.on("migration:qlik", async (w, options) => {
try {
var options = JSON.parse(options);
let data = await Promise.all(
options["application_info"].map(async appToBeMig => {
let certificates = await qvfToJson.qvfToJson();
var server = store.get("qlik_server");
var userDir = store.get("qlik_user_dir");
var userID = store.get("qlik_user_id");
let session = enigma.create({
schema,
url: `wss://${server}}:4747/app/engineData`,
createSocket: url =>
new WebSocket(url, {
ca: certificates.root,
cert: certificates.cert,
key: certificates.key,
headers: {
"X-Qlik-User": `UserDirectory=${userDir}; UserId=${userID}`
}
})
});
let global = await session.open();
let doc = await global.openDoc(appToBeMig["app_id"]);
let appData = await serializeapp(doc);
await session.close();
return appData;
})
);
console.log(data);
} catch (err) {
console.log(err);
}
});