PromiseはES2015から導入されたJavaScriptの言語機能で、非同期処理を表すオブジェクトです。基本的な使い方としては、まずfetchなどの非同期的な処理の結果としてPromiseオブジェクトが得られます。それに対してthenメソッドなどを用いることで、非同期処理が終わった後の次の処理を登録できます。また、ES2017で追加されたasync/awaitの構文はPromiseを便利に扱うためのものです。これはJavaScriptに独特の概念ではなく、C#ではTask、RustではFutureなどと呼ばれているようです。 JavaScriptを使っている多くの方は、Promiseを多かれ少なかれ使ったことがあるでしょう。そして、Promiseには結果が2種類、すなわち成功と失敗があることをご存知かと思います。このように、Promiseには状態があります。成功した状態、失敗した状態
If you are like me you will also end up doing a lot of asynchronous work in componentWillMount/componentDidMount. This article will show you how to use Async/Await with React’s Lifecycle events. React’s lifecycle methods can return any value, including a promise. Promise Version componentDidMount() { fetch('https://example.com') .then((res) => res.json()) .then((something) => this.setState({someth
はじめに AigleというPromiseライブラリを開発しています。このライブラリはベンチマーク上だけでなく実際の本番環境を考慮した高速化を実現しています。 今回はその過程でBluebirdに大変お世話になったので、なぜBluebirdが速いのか、そしてなぜAigleが速いのかついて説明したいと思います。 基本的なPromiseの知識 まず本題に入る前にPromiseの基本的なことを説明しておきます。 Promiseにはpending, fulfilled, rejectedの3つの状態があります。一度pendingから別の状態に変わった場合は、そのPromiseの状態が変わることはありません。 (引用: MDN) またPromiseは非同期であることが保証されています。この事は少し重要なので触れておきます。
Promises are very simple once you get your head around them, but there are a few gotchas that can leave you with your head scratching. Here are a few that got me. Nested Promises You get a whole bundle of promises nested in eachother: loadSomething().then(function(something) { loadAnotherthing().then(function(another) { DoSomethingOnThem(something, another); }); }); The reason you’ve done this is
By writing this I'm taking a risk of looking like an idiot who has failed to read the docs. So please be gentle. AngularJS uses a promise module called $q. It originates from this beast of a project. You use it like this for example: angular.module('myapp') .controller('MainCtrl', function($scope, $q) { $scope.name = 'Hello '; var wait = function() { var deferred = $q.defer(); setTimeout(function(
応用可能性の低そうなメモ。 AngularJSの$httpでは、戻り値のpromiseについて、通常のthenのほかに、success / errorを使うことができます。これはどうしてなのでしょうか?AngularJSのpromiseの隠し仕様で、戻り値の関数名を指定することができるのか、それとも隠しメソッドとして、sucess / errorを持っているのか?などと妄想が膨らんでしまいます。 そこで、AngularJSのコードを読んでみると、大したことはなく、 promise.success = function(fn) { promise.then(function(response) { fn(response.data, response.status, response.headers, config); }); return promise; }; promise.error
各方式は対立するのか? ところでこれらの方式って、必ずしも対立するってわけじゃないんですよね。 JavaScriptのgeneratorはまだ使えるところが限られるけど、コールバックが不要で同期処理のように簡単に書けるのはやはり魅力的です。 一方で、ちょっとした非同期処理をReactive Programmingで処理するのはおおげさですが、ストリーム的に流れてくる複数のイベントを合成したり、時間的な操作をしたりする場合には圧倒的に便利です。 なので、適材適所で使い分けるのがよさそうです。(なんの解決にもなってない!) promise, co, RxJS さて、使い分けると言っても、方式が異なるものを混ぜて使うことは可能でしょうか? 実は、それぞれの方式は対立しないどころか、連携することも可能です。 各方式の代表的な実装であるpromise, co, RxJSを例にみてみましょう。 まず、
Written by Yuri Takhteyev14 January 2015 Any non-trivial JavaScript requires dealing with asynchronicity. JavaScript can't wait, so if something that you want is not available right away, your code can't just sit around until the result comes back. Instead, the baseline solution is a callback: you provide a function that will be called when the result is either available or the operation is known
JavaScript Promiseの本という無料で読める電子書籍を書きました。 タイトルそのままで、JavaScriptのPromiseについて書いた書籍です。 書籍の目的 この書籍を読むことで学べる事として、次の3つを目標にして書きました。 Promiseについて学び、パターンやテストを扱えるようになる事 Promiseの向き不向きについて学び、何でもPromiseで解決するべきではないと知る事 ECMAScript6 Promiseの基本をよく学び、発展した形を自分で形成できるようになる事 Promiseは、次のECMAScriptの言語仕様として策定が進められていて既に多くのブラウザに実装されています。 Promiseについて扱う書籍ですが、この機能はjQuery.Deferred()やAngularJSの$qやBluebird等の類似の機能が既にあるため扱ったことがあるかもしれま
「HackerNews翻訳してみた」が POSTD (ポスト・ディー) としてリニューアルしました! この記事はここでも公開されています。 Original article: Managing Node.js Callback Hell with Promises, Generators and Other Approaches by Marc Harter 下のようなコードが、親しみをこめて「コールバック地獄」とか「死のピラミッド」とか呼ばれているのはご存じですよね。 doAsync1(function () { doAsync2(function () { doAsync3(function () { doAsync4(function () { }) }) }) この状態がコールバック地獄かどうかは、意見の分かれるところでしょう。ネストがいくら深くても全く問題がないコードもあるからで
Matthijs Groen talks at the Guild (http://theguild.nl) about Javascript Promises, a design pattern for dealing with asynchronous Javascript calls. Video…
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く