new Promise((resolve, reject) => {
DB.get(params, function(err, data) {
if (err) reject(err)
else resolve(data.Item)
})
})
.then((data) => {
let params = { Name: 'DEMO' }
CWevents.putRule(params, function(err, data) {
if (err) console.log("Error", err)
else console.log("Success")
})
})
.then(() => {
let params = { Rule: 'DEMO' }
CWevents.putTargets(params, function(err, data) {
if (err) console.log("Error", err)
else console.log("Success", data)
})
})
您可以将cwevents.putrule
调用包装在promise中。然后,可以从CWevents.putrule
调用promise的解析或拒绝。这可以通过然后
或错误
捕获
您的代码应该如下所示
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();
我正在研究promsies和async/await的用法。 我编写了以下代码,它执行以下操作: 它获取一些数据库数据(使用Knex.js), 处理该数据, 将处理的数据分配到指定的属性中 这3个步骤执行了多次(在下面的代码中,执行了两次),并且始终等待执行: 现在,我正在尝试编写与等效的promise链,这就是我想到的: 但这不太管用。发生的是,在第一个返回之后,中的结束了它的等待,这导致返回-并
链式调用异步函数。 循环遍历包含异步事件的函数数组,每次异步事件完成后调用 next 。 const chainAsync = fns => { let curr = 0; const next = () => fns[curr++](next); next(); }; chainAsync([ next => { console.log('0 seconds');
我有一个异步块: 我可以跟踪成功和失败的结果。但是,是否可以重试整个chain?然后继续重试,直到问题解决?
我被要求创建一个名为的对象,它可以链接函数和。 例如: 在此场景中,它首先打印早餐,等待3秒钟,打印午餐,然后在3秒钟后打印晚餐。 我试过这样的东西,但没用。我错过了什么?
我试图利用es7异步功能,即。 在这里,所有promise*函数都进行ajax调用,并返回或如果ajax响应满足传递的参数,我相信我不能连续使用3个等待,因此需要一种方法来等待所有这些调用以某种方式返回它们的值。
问题内容: 我目前正在尝试诺言,并且有一个非常基本的问题! 在一个Promise链中,调用同步函数是否是错误的做法?例如: 还是应该将我的同步功能重构为也返回承诺? 问题答案: 在一个Promise链中,调用同步函数是否是错误的做法? 不,这根本不是一个坏习惯。这是许多预期和有用的实践之一。 您可以完全自由地(在处理程序中)调用promise链中的同步函数或异步函数,然后再返回新的promise。