Вы можете заключить вызов CWEvents.putRule
в Обещание. Затем вы можете позвонить по решению или отклонить обещание от CWEvents.putRule
. Это может быть зафиксировано then
или error
Ваш код должен выглядеть следующим образом
new Promise((resolve, reject) => {
DB.get(params, function(err, data) {
if (err) reject(err);
else resolve(data.Item);
});
})
.then(data => { // data not needed as you are not using it in the remaining code
let params = { Name: "DEMO" };
return new Promise((resolve, reject) => {
CWevents.putRule(params, function(err, data) {
if (err) {
console.log("Error", err);
reject(err)
} else {
console.log("Success");
resolve() // resolve(data) if you want to pass the data from CWEvents.putRule
}
});
});
})
.then(() => {
let params = { Rule: "DEMO" };
CWevents.putTargets(params, function(err, data) {
if (err) console.log("Error", err);
else console.log("Success", data);
});
});
Вы можете сделать то же самое в гораздо более удобочитаемом виде, используя async await
async function process() {
try {
var data = new Promise((resolve, reject) => {
DB.get("params", function(err, data) {
if (err) reject(err);
else resolve(data.Item);
});
}); // this will return a promise to the variable data
var response = (function processData(data) {
let params = { Name: "DEMO" };
return new Promise((resolve, reject) => {
CWevents.putRule(params, function(err, data) {
if (err) {
console.log("Error", err);
reject(err);
} else {
console.log("Success " + data.Item);
resolve(data);
}
});
});
})(await data);
/* by using the await keyword , we can wait for the promise to be complete before moving on to the next step
of execution.
*/
/*
* waiting on the response promise to complete
*/
if (await response) {
let params = { Rule: "DEMO" };
CWevents.putTargets(params, function(err, data) {
if (err) console.log("Error", err);
else console.log("Success", data);
});
}
} catch (e) {
console.log("Error occured during operation " + e);
}
}
process();
Более подробную информацию о async await
вы можете найти в MDN