AngularJS には $qっていう promise の枠組みがあるので、使っておくといいこと (ビューが自動的に更新されるだけだけど) がある。フレームワーク組込みの仕組みがあるのに別途 Deferred の仕組み、しかも thenable(笑) じゃない(笑) JSDeferred を読むのもバカにされると思うので、以下のように JSDeferred から Angular $q へ置き換える方法を記す。

基本

JSDeferred における global な next() 関数を $q.when().then() に置き換え、Deferred#next を then() に置き換えればだいたい動く

next(function () {
    alert(1);
    return next(function () {
        alert(2);
    }).
    next(function () {
        alert(3);
    });
}).
next(function () {
    alert(4);
});

こういうのを、こう

$q.when().then(function () {
    alert(1);
    return $q.when().then(function () {
        alert(2);
    }).
    then(function () {
        alert(3);
    });
}).
then(function () {
    alert(4);
});

parallel() は?

$q.all() を使え

loop() は?

頑張って書く。いろいろやりかたはあると思うけど、例えばこう

$q.when().then(function () {
	var list = [1, 2, 3], sum = 0;
	return $q.when().then(function loop () {
		if (list.length) {
			return $q.when(list.shift()).then(function(item) {
				console.log('item', item);
				sum += item;
			}).then(loop);
		} else {
			return sum;
		}
	});
}).
then(function (result) {
	console.log(result);
});

wait() は?

setiTimeout で頑張って書く

  1. トップ
  2. tech
  3. JSDeferred -> Angular $q 置き換え方法

name (flash/sram) cost

USB 対応

  • ATmega32u2 (32k/1k) 400円
  • AT90USB162 (16k/0.5k) 300円
  • 最大16MHz
  • USB ホストにもなれる
  • 12Mbps 対応
  • 外付け部品が少し簡単
  • 表面実装品しかない

V-USB

  • ATmega328p (32k/2k) 250円
  • ATmega168p (16k/1k) 200円
  • ATTiny2313 (2k/128) 150円
  • 最大20MHz (5V動作時)
  • USBスレーブにしかなれない
  • ファームウェアコードにいくらか制限あり (割込み頻度とか)
  • ドライバが GPL
  • DIPあり

感想

  • V-USB はファームウェアを GPL にするか、ライセンス購入する必要があるが、個人の趣味レベルではどうでもいい
  • 価格の絶対差はそれほどでもないが、同じ金額で1個買えるか、2個買えるかと考えるとだいぶ違いを感じる
  • よりスマートなのは USB 対応のを使うことだと思うが、見た目的にはどっちもワンチップで完結する
  • USB 対応品は、USB 周辺については 3.3V で動いておりレギュレータを内蔵している。V-USB は高いクロックで動かそうとするとVCCを5Vにせざるを得なくて、そこらへん泥臭くなってしまう