時間も遅いのでとりあえずは前提と備忘録だけ
前提
- Node.js の aws-sdk を使って簡易的なツールを作ろうとしている最中
- 今、いじろうとしているのは S3
- Node のバージョンは
v6.9.2
promise()
を使うと Promise もサポートされる
aws-sdk は Promise とかができる前から作られていたらしく、基本的に callback を前提とした作りになっている。
けども昨今の Promise による、管理しやすい実装もちゃんとサポートされていて、promise()
という関数を噛ませる事で、Promise を返すようになる
けど、コードの違いに注意
// Callback による実装
s3.createBucket({Bucket: 'mybucket'}, (err, data) => {
if (err) {
return console.log("Error", err);
}
return console.log(data);
});
// Promise
s3.createBucket({Bucket: 'mybucket'}).promise().then(data => {
return console.log(data);
}).catch(err => {
return console.log("Error", err);
});
ご覧の通り、エラーは catch
によって検知できるので、then
へ渡される値は1つになるのです。(というか2つの値を return できないから必然的に 1 つになるしかないんだけどさ)
最初、then の中でも (err, data) => {}
と書いていたから、エラー吐いてるけど S3 は作られているという謎状況に陥って少しハマってました←
以上、そんな感じで。