- 投稿日:2019-11-15T14:55:50+09:00
npm pack でnpmパッケージを圧縮する
node_module内のファイル(主にandroidのbuild.gradleなど)を編集した際に
npm pack
のコマンドを使用して変更を加えたパッケージを.tgzファイルにして、package.jsonの読み込み先を.tgzファイルに必要がある。手順
例:
react-native-maps
のbuild.gradle
を編集した時
- 編集したパッケージのフォルダに移動(
node_modules/react-native-maps/
)し、.tgzファイルを生成npm pack
- custom_modulesフォルダを作っておき、生成された.tgzファイルをcustom_modulesフォルダに移動する
- 読込先を.tgzファイルに変更する
npm i react-native-maps-0.24.2.tgz
- package.jsonの読み込み先が変更されているか確認する
package.json"react-native-maps": "file:custom_modules/react-native-maps-0.24.2+.tgz"参考にした記事
- 投稿日:2019-11-15T13:46:19+09:00
AWS DynamoDBをjsでいじるときに非同期処理で詰まった話
AWS DynamoDBをjsでいじるときに非同期処理で詰まった話
初めに
このお話は、単に私がJavaScriptの非同期処理を理解していなかっただけなので、プロの皆さんでしたら余裕で回避できる問題だと思います。
私みたいな初学者で、同じようなことに詰まっている方がこの記事を見て解決していただけたら幸いです。
私がやりたかったこと
DynamoDBのCRUD操作を関数内で行い、実行結果を戻り値として受け取る といったことをしたかったのですが、戻り値に値が入っていない状態で返されてしまいました。
// 問題のあるコード function getHoge(){ let hoge; let params = { TableName: 'table', Key:{ "id": "01" } }; documentClient.put(params, function(err, data){ if(err){ console.log(err); }else { console.log(data); // {} hoge = data; } }); return hoge; } exports.handler = function (event) { let hoge = getHoge(); console.log(hoge); // undifind }PHPのようなノリで書いてしまったため、undifindの原因がわからずに悩みまくってましたが、ようやっと非同期処理のせいだ!って気づいたため、以下のように書き直しました
書き直した
// ちゃんと動くやつ async function getUser() { let hoge; let params = { TableName: 'table', Key:{ "id": "01" } }; try { // hogeにデータが入るまで待つ hoge = await documentClient.get(params).promise(); } catch (e) { console.log(e); } return hoge; } exports.handler = async (event) => { let hoge = await getUser(); console.log(hoge); // {jsonデータが見れる!} };はい、解決。
公式ドキュメントを見てみると、、、
DynamoDB DocumentClient get-propaty
var params = { TableName : 'Table', Key: { HashKey: 'hashkey' } }; var documentClient = new AWS.DynamoDB.DocumentClient(); documentClient.get(params, function(err, data) { if (err) console.log(err); else console.log(data); });コールバックで書かれてるので、JS初心者には自力での解決キツイっす。。。
最後に言いたいこと
非同期むづかしい