try catch and ...release
ページ
ホーム
Chromeアプリ開発Tips
公開アプリ
Ubuntu
Linuxコマンド
#!/bin/bash
ブロックチェーンと暗号通貨
2016年6月28日火曜日
Meteor: サーバサイドMethod内で非同期処理を行う方法
環境: Meteor v1.3.3 MeteorのサーバサイドのMethod内で非同期処理を行いたいときは、npmの```fibers/future```パッケージを使うと簡単です。 サーバサイドのMethodの中で```future.wait();```をreturnしておいて、非同期callback関数の中で```future.return(result);```みたいにして結果をクライアントに返してやればOK。 下記の例では現在時刻をサイトからスクレイピングして非同期でクライアントに返しています。
まずはスクレイピングのためにcheerioをインストール: ``` $ meteor npm install cheerio ``` サーバサイドのコード: server/main.js ```javascript import { Meteor } from 'meteor/meteor'; Future = Npm.require('fibers/future'); var cheerio = require('cheerio'); // meteor npm install cheerio const url = "http://www.timeanddate.com/worldclock/city.html?n=136"; var getTimeAsync = function(cb) { Meteor.http.get(url, function(err, result) { $ = cheerio.load(result.content); return cb($("#ct").text()); }); } Meteor.methods({ // 現在時刻を非同期で返すMethod 'getTime': function() { console.log("getTime called"); let future = new Future(); // for using async func returns result to client getTimeAsync(function(ret) { future.return(ret); }); return future.wait(); } }); ``` クライアントサイドのコード: client/main.html ```html {{> currentTime}}
Click Me
Current Time: {{ct}}
``` client/main.js ```javascript import { Template } from 'meteor/templating'; import { ReactiveDict } from 'meteor/reactive-dict'; import './main.html'; Template.currentTime.onCreated(function() { this.state = new ReactiveDict(); }); Template.currentTime.helpers({ ct: function() { return Template.instance().state.get("ct"); }, }); Template.currentTime.events({ 'click button'(event, instance) { // サーバサイドのMethodをコール Meteor.call("getTime", function(error, result) { instance.state.set("ct", result); // result: "5時24分24秒" }); }, }); ``` Enjoy!
0 件のコメント:
コメントを投稿
次の投稿
前の投稿
ホーム
モバイル バージョンを表示
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿