20191115のNode.jsに関する記事は2件です。

npm pack でnpmパッケージを圧縮する

node_module内のファイル(主にandroidのbuild.gradleなど)を編集した際にnpm packのコマンドを使用して変更を加えたパッケージを.tgzファイルにして、package.jsonの読み込み先を.tgzファイルに必要がある。

手順

例:react-native-mapsbuild.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"

参考にした記事

https://qiita.com/sasaplus1/items/f206dccd50709a50bbd0

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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初心者には自力での解決キツイっす。。。

最後に言いたいこと

非同期むづかしい

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む