非同期->同期
http://labs.cybozu.co.jp/blog/kazuho/archives/2007/05/coopthread.php
JavaScript/1.7 の話なので Firefox 限定です。以前、
残念ながら、JavaScript には非同期メッセージを同期化する方法はない!残念!><ほんとに残念!
JavaScript 1.7 なら yield でできるんじゃないかと思いました。
と書いたっきり失念していたのですが、社内で話題になったので実装してみました。
ということはyield使えばきっと
http://d.hatena.ne.jp/amachang/20061129/1164799871
の逆に、最後にcallbackをとる非同期関数を同期化して
Function.prototype.synchronize = function() { var args = Array.prototype.slice.apply(arguments); var _orig = this; return function() { _orig.apply(this, arguments.concat(function(data) { //... }) yield; //... } }
function getDeliciousNetwork(userid, callback) { // JSONP call for 'http://del.icio.us/feeds/json/network/'+userid ... } function getDeliciousPosts(userid, callback) { // JSONP call for 'http://del.icio.us/feeds/json/'+userid ... }
みたいなJSONP呼び出し(非同期)を
var network = getDeliciousNetwork.synchronize('stomita') for (var i=0; i<network.length; i+) { print(getDeliciousPosts.synchronize(network[i])) }
みたいなことが出来るもんだと思って、ちょっとがんばってみたんだけど、難しそう。この前みたいに遅延を使うしかないのかな。