LoginSignup
1

More than 5 years have passed since last update.

[Parse]Jobのスケジュール設定について

Last updated at Posted at 2015-07-05

最近Parseでちょいちょい遊んでいるのですが
Jobのスケジュール設定でちょっとした罠があって
それにドハマリしたので、
注意喚起をかねつつ、愚痴をかきつつ、
間違い・勘違いがあれば教えて欲しい(本音)っていうことで書きます

問題

Cloud Code機能でjobを登録すると
Parseの管理画面でjobのスケジュール設定が出来るようになります。
スケジュールなのでもちろん定期的に実行とかも

jobのスケジュール設定画面

その設定画面がコチラ

ジョブの説明、実行するジョブ(Cloud Codeで登録したジョブ名が一覧で出ます)
そして、実行時に渡せるパラメータ

この渡すパラメータに罠がありました

詳細

json形式でとhintが書かれているので
{"name": "hoge"}という感じで入力してみました

そしてソレを受け取るjobはこんな感じ

main.js
Parse.Cloud.job('MyJob', function(request, status) {
    console.log(request.params);
    console.log(request.params.name);
    status.success('finish');
});

ドキュメントを見ているとrequest.paramsで受け取れそうだったので
こう書いてみます

結果のログはというと

{"name":"hoge"}
No Message provided

こういう感じ。request.params.nameが取れません

なんで?!ってめちゃ悩みました。。

原因

そもそも、これ何者なんだろうっていう疑惑がわいたので
console.log(typeof request.params)
とやってみました

string

(つд⊂)ゴシゴシ...
( ✧Д✧) カッ!!
...(╹⌓╹ )
( ‘д‘⊂彡☆))Д´) パーン

みたいな...

ま、よくよくログをみると、
自分で出してるログの他に
Parseが標準で出してくれるログがあるんですけど
そこでは

Input: "{\"name\":\"hoge\"}"

ってでてて、めちゃエスケープされとる...って気づくんですけど...(汗)

対策

ということで、object化してあげて、引き出せばokです

main.js
Parse.Cloud.job('MyJob', function(request, status) {
    var params = request.params;
    // 何かのひょうしでjsonオブジェクトになってくるかもなので
    // タイプチェックをいれとく
    if (typeof params === 'string') {
        params = JSON.parse(params);
    }
    console.log(params.name);
    status.success('finish');
});

こんな感じ
もちろん、stringってわかっちゃったので、
一つだけしかなかったら、そのままつかえばいいし
カンマ区切りでsplitとかやってもいいと思いますけど

そもそもjsonフォーマットじゃないとパラメータのとこに保存出来ないので
この文字列をsplitとかっていうのは無理そうです...m(_ _)m

おわりに

ということで、利用する際はお気をつけを
というか...
世のParse使いのみなさん、どうですか?これ、そうなんですか?(汗)
なんか僕間違ってますか?..みなさん出来てますか?やってない?試してみませんか?(笑)
何か正しい?出来るよ!っていうのがあれば、教えて欲しいです

参考

Introducing Background Jobs
ここの、設定画面のスクショとコードが罠の根源!
さもjsonフォーマットで設定したら、request.params.planとかで取れるぜーみたいな書き方
まぁ、そもそもスクショで設定してるパラメータを引き出してるわけではないんですけど
ええ、八つ当たりですよ!(´;ω;)チクショー!!

Cloud Code - JavaScript Developers Guide | Parse

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1