「JavaScript/変数」の版間の差分

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
タグ: 2017年版ソースエディター
Ef3 (トーク | 投稿記録)
タグ: 2017年版ソースエディター
317 行
 
for (let i = 0; i < 3; i++) {
sleep(500 * i).then(
.then(() => console.log(Date.now() - start, "ms: ", i)
)
}
console.log("after for loop.")
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="JavaScript">
after for loop.
25 ms: 0
501 ms: 1
1001 ms: 2
</syntaxhighlight>
:PrpomisePromiseオブジェクトを返す sleep() を定義しています。
:sleepを引数で与えられたミリ秒後に、Callable オブジェクト resolve を実行するものです。
:"after for loop." が真っ先に実行されているように、Promiseオブジェクトは平行実行されます。
 
== Promiseを使った実装(rejectを伴う例) ==
Promiseは、実行が成功したケースの他、何らかのエラーが起こり失敗したケースのハンドリングンも可能です。
;[https://paiza.io/projects/7pXzIYBhC9QfSO4hImiANw?language=javascript Promiseを使った実装(rejectを伴う例)]:<syntaxhighlight lang="JavaScript">
function sleep(ms, data) {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (Math.random()*4.0|0>1)
resolve(ms, data)
else
reject(ms, data)
}, ms)
})
}
var start = Date.now()
 
for (let i = 0; i < 10; i++) {
sleep(50 * i, i)
.then((ms, data) => console.log(Date.now() - start, "ms: then()", i))
.catch((ms, data) => console.log(Date.now() - start, "ms: catch()", i))
}
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="JavaScript">
2 ms: catch() 0
51 ms: then() 1
101 ms: then() 2
151 ms: then() 3
201 ms: then() 4
251 ms: then() 5
301 ms: catch() 6
351 ms: then() 7
401 ms: catch() 8
451 ms: catch() 9
</syntaxhighlight>
:乱数でresolveとrejectを振り分けています。
 
=== ブロックスコープ ===