酒と泪とRubyとRailsと

Ruby on Rails と Objective-C は酒の肴です!

Meteor.js Promise でサーバ処理呼び出して結果を非同期で表示する

Meteorでサーバ処理を呼び出しつつ、 処理の結果を非同期でrenderしたくって、パッケージ『deanius/meteor-promise』 を導入したのでそのメモです。


やりたかったこと

- クライアントのタイムゾーンの日付 => サーバに送付して todo 完了に変更
- todo が完了したら、完了していない todo の件数をサーバで計算
- todo の件数をサーバで計算し終わったら、 ビュー側を更新

Meteor Package promise の導入

パッケージを導入。(ejsonもいるっぽいです)

1
2
meteor add deanius:promise
meteor add ejson

次にclient側のjsに以下の処理を追加。

1
2
3
4
5
Template.todosItem.helpers({
  checked: ReactivePromise(function (todo) {
    return Meteor.callPromise("todoChecked", {todoId: todo._id, checkedAt: getDate()});
  }, false)
});

Meteor.call("todoChecked") って書くところを Meteor.callPromise("todoChecked") と書いて、 結果が来たらレンダーしてくれる。

ライブラリの詳しい使い方

公式の Meteor Async w/ deanius:promise はデモもあって分かりやすかったです!

所感

- Package「deanius:promise」自体は使いやすいし、感激
- JavaScript/Meteor.js 弱者過ぎて、本当に正しい書き方とは思えない。誰かおしえてください><
- Promiseってもう少し別の概念な気がする。ユースケース間違ってる気がしてならない。
- いちいちサーバサイド呼び出しまくってるけど本当にいいのだろうか...、ユーザーちゃんと来たらさばけなくない?

つまりもうちょっとちゃんと勉強しろってことかな。まずは一回JavaScriptちゃんと勉強してみようと思います。

Healthack.me ちょっとずつ改善中

自分の健康管理のチェックリストアプリですが、『healthack.me』を改善中です。 機能の要望とか、コードのまずい部分の修正とかあれば、『morizyun/healthack - GitHub』 のISSUEに登録ください。


おすすめの書籍