【发布时间】:2017-04-17 16:35:53
【问题描述】:
我正在使用 Node.js 和 AWS DynamoDB (aws-sdk) 来实施我的服务。
我不清楚如何使用 Promise 实现以下场景:
- 我收到修改具有指定属性的实体的请求
- 我正在尝试在数据库中查找实体(异步调用
find) - 如果找不到实体,则创建一个具有初始状态的实体(异步调用
createInitialStateObject) - 根据特定规则(异步调用
applyModifications)修改实体(之前在数据库中或刚刚在步骤3中创建)
这是我的第一次尝试:
function scenario(params) {
find(params).then((data) => {
let objectExists = checkExistense(data);
if (!objectExists) {
createInitialStateObject(params).then((data) => {
console.log("Object created");
// OK
}).catch((err) => {
console.error("Object not created");
// exit and return error
});
}
applyModifications(params).then((data) => {
// OK, return data
}).catch((err) => {
// exit and return error
});
}).catch((err) => {
// exit and return error
});
}
但这里的缺陷是,创建可以在修改之前发生,而不一定要一个接一个地发生。
另一个尝试有效,但看起来有点奇怪。如果对象已经存在,我会创建一个空承诺来调用:
function scenario(params) {
find(params).then((data) => {
let conditionalPromise = new Promise((resolve) => {
resolve(null);
});
let objectExists = checkExistense(data);
if (!objectExists) {
conditionalPromise = createInitialStateObject(params);
}
conditionalPromise.then((data) => {
applyModifications(params).then((data) => {
// OK, return data
}).catch((err) => {
// exit and return error
});
}).catch((err) => {
// exit and return error
});
}).catch((err) => {
// exit and return error
});
}
应该如何以正确的方式实施?
【问题讨论】:
标签: node.js asynchronous promise es6-promise