このようにプロモーションを理解します
5674 ワード
プロモーションは何ですか
promiseは特別な作業の最終結果を表します.
翻訳==promiseを一つのステータスマシンとして理解できます.三つの異なる状態があり、ある時点で一つの状態しかありません.ペンディングはまだ実行されているということです. レシオ実行成功 レジェクト実行失敗 一つのpromiseは一つの非同期操作のパッケージで、非同期操作は完成、成功、失敗の三つの可能性がある結果を待って、promiseの3つの状態に対応しています.
promiseの状態は、pending変換ビットreolvedまたはpendingからrejectiedに転換するしかなく、一旦状態が転化されたらもう変えられない.
プロミスで非同期的な操作を封じたとすると、作成された時点でpending状態になり、非同期操作が成功した時には、状態をrevovedに変換します.実行中にエラーが発生したら、状態をrejectに変換します.
then方法は常に新しいpromiseオブジェクトに戻り、thenメソッドを複数回呼び出し、デフォルトでは一つの空きpromiseオブジェクトに戻ります.私たちはthen方法でプロミスの結果を取得しますが、promiseはthen方法で呼び出された後に実行されますか? レノベ レジェクト all race方法は、プロミス配列をパラメータとして受信し、新たなプロミスを返します.配列中のプロミスは同時に実行を開始します.raceが返されるプロミスの状態は、行列の中で最初に実行されたプロミスの状態が決定されます. catch実行エラーは、throwキーワードを使用してエラーを発生させ、catch方法を使用して を捕捉することができる.
awaitのキーワードの後ろにはプロミスが多いです.プロミゼーを暗黙的に呼び出しないとプロミゼーに変換します.awaitは後のpromiseの実行を待って次の操作を行います.
async関数は常にプロミスオブジェクトに戻ります.もしreturnキーワードの後ろにプロミスがないなら、デフォルトでプロミスを呼び出します.resoliveメソッドを変換します.は、async関数が実行を開始すると、プロミセオブジェクトを自動的に生成する. メソッドが実行を開始した後、returnキーワードまたはthrowキーワードが発生した場合、実行は直ちに終了し、 awaitキーワードが発生したら、awaitの後の非同期動作を一時停止します.終了後に実行を再開します.の実行が完了し、プロモーション に戻ります.
await操作子の結果はその後ろのpromiseオブジェクトの操作結果によって決定されます.もし後ろのpromiseオブジェクトがresovedになったら、await操作子が返した値はresoveの値です.プロジェクト対象の状態がrejectになれば、awaitもrejectの値を投げます.
awaitは、後のプロミセが完成するのを待って次の動作を行います.これは複数のawaitを操作すると、プログラムが完全なシリアル操作になります.
非同期動作間に依存関係が存在しない場合、並列を実現するためにプロミセ.allを使用することができる.
awaitキーワード使用のポイント awaitキーワードはasync関数内部にある必要があります. awaitキーワードの後ろにはpromiseオブジェクトが必要です. awaitキーワードの返却結果は、その後ろのpromiseで実行された結果、おそらくreolvedまたはrejectの値 である.は通常の矢印関数ではawaitキーワードを使用できません.矢印関数の前にasyncキーワードを追加する必要があります. awaitはシリアルで非同期動作を実行するために使用されています.promise.all を並列に使用したいです.
async関数の欠点は、多くの層の方法で呼び出され、最下層の非同期動作がasync方法にパッケージされていると仮定すると、この関数のすべての上位層の方法がasync方法になる可能性がある.
promiseは特別な作業の最終結果を表します.
翻訳==promiseを一つのステータスマシンとして理解できます.三つの異なる状態があり、ある時点で一つの状態しかありません.
promiseの状態は、pending変換ビットreolvedまたはpendingからrejectiedに転換するしかなく、一旦状態が転化されたらもう変えられない.
プロミスで非同期的な操作を封じたとすると、作成された時点でpending状態になり、非同期操作が成功した時には、状態をrevovedに変換します.実行中にエラーが発生したら、状態をrejectに変換します.
var promise=new Promise(function(resolve,reject){
// code
if(){
/* */
resolve(value)
}else{
reject(error)
}
})
thenメソッドを使って結果を取得します.var fs=require('fs')
function readFile_promise(path){
return new Promise(function(resolve,reject){
fs.readFile(path, 'utf-8',function(err,data){
if(data){
resolve(data)
}else{
reject(err)
}
})
})
}
var result=readFile_promise('./1.txt')
result.then(function(value){
//success
console.log('success', value)
},function(error){
//failure
console.log('failure',error)
})
// promise, resolve reject 。
// resolve , 。
// reject , 。
thenメソッドの戻り値then方法は常に新しいpromiseオブジェクトに戻り、thenメソッドを複数回呼び出し、デフォルトでは一つの空きpromiseオブジェクトに戻ります.
var promise=readFile_promise('./foo.txt')
promise.then(function(value){
//success
console.log('success', value) // foo
return readFile_promise('./bar.txt')
},function(error){
//failure
console.log('failure',error)
}).then(function(value){
console.log('then', value) // bar
})
プロモーションの実行var promise=new Promise((resolve, reject)=>{
console.log('begin')
resolve()
})
setTimeout(()=>{
promise.then(()=>{
console.log('end')
})
},5000)
// begin 5s end
// , promise ,then promise , promise 。
promiseでよく使うアプリ // promise , promise.all()
// , promise promise
// , promise , resolve 。
// promise reject, promise reject, catch
var promises=['foo.txt','bar.txt','baz.txt']
promises.map(function(path){
// console.log(path)
return readFile_promise(path)
})
Promise.all(promises).then(function(results){
console.log(results) // [ 'foo.txt', 'bar.txt', 'baz.txt' ]
}).catch(function(err){
//
})
promise組織の非同期コードを使う// ;
var lists=['foo.txt','bar.txt','baz.txt']
var count=0;
readFile_promise('foo.txt').then(readCB).then(readCB).then(readCB);
function readCB(data){
console.log(data) // foo bar baz
if(++count>2){
return
}
return readFile_promise(lists[count])
}
async/awaitawaitのキーワードの後ろにはプロミスが多いです.プロミゼーを暗黙的に呼び出しないとプロミゼーに変換します.awaitは後のpromiseの実行を待って次の操作を行います.
var asyncReadFile=async function(){
var result1=await readFile_promise('./foo.txt')
console.log(result1.toString()) // foo
}
asyncReadFile()
async戻り値async関数は常にプロミスオブジェクトに戻ります.もしreturnキーワードの後ろにプロミスがないなら、デフォルトでプロミスを呼び出します.resoliveメソッドを変換します.
async function asyncFunc(){
return 'hello Node'
}
asyncFunc().then(function(data){
console.log(data) // hello Node
})
async関数の実行過程async function asyncFunc(){
console.log('begin')
return 'hello Node'
}
asyncFunc().then(function(data){
console.log(data) // hello Node
console.log('end')
})
// begin
// hello
// end
awaitawait操作子の結果はその後ろのpromiseオブジェクトの操作結果によって決定されます.もし後ろのpromiseオブジェクトがresovedになったら、await操作子が返した値はresoveの値です.プロジェクト対象の状態がrejectになれば、awaitもrejectの値を投げます.
async function readFile(){
var result=await readFile_promise('./foo.txt')
console.log(result) // foo
}
readFile()
//
readFile_promise('foo.txt').then(function(data){
console.log(data) // foo
})
awaitは並行しているawaitは、後のプロミセが完成するのを待って次の動作を行います.これは複数のawaitを操作すると、プログラムが完全なシリアル操作になります.
非同期動作間に依存関係が存在しない場合、並列を実現するためにプロミセ.allを使用することができる.
async function readFile(){
const [result1, result2]=await Promise.all([
readFile_promise('./foo.txt'),
readFile_promise('./bar.txt')
])
console.log(result1, result2) // foo bar
}
readFile()
//
function readFile(){
return Promise.all([
readFile_promise('./foo.txt'),
readFile_promise('./baz.txt')
]).then((result)=>{
console.log(result) // [ 'foo', 'baz' ]
})
}
readFile()
awaitまとめawaitキーワード使用のポイント
async関数の欠点