1
私はNode.jsをAWS DynamoDB(aws-sdk
)で使用してサービスを実装しています。非同期呼び出しからの約束と条件
それは約束で次のシナリオを実装する方法を私のため不明だ:
- 私は指定された属性
- でエンティティを変更する要求を取得し、私はDB(非同期でエンティティを見つけようとしていますエンティティは、初期状態とのいずれかを作成する見つからない場合
find
) - を呼び出す(非同期前DBであったか、または単にステップ3で作成された)特定の規則に従ってエンティティを(変更
createInitialStateObject
) - を呼び出す(非同期呼び出し
applyModifications
)
これが私の最初の試みである:
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
});
}
これは正しい方法で実装する必要がありますか?
'非thenable object'の戻り値が' Promise.resolve(値)を返すことと等価である ' - [仕様](https://promisesaplus.com/#point-40に従ってため) '.'は約束を返さなければなりません –