標籤:article lang rom span 方式 過程 azure llb 著作權
著作權聲明:本作品採用知識共用署名-非商業性使用-相同方式共用 4.0 國際許可協議進行許可。轉載請註明來源http://blog.csdn.net/azureternite
目錄(?)[+]
Promise的概念
Promise 對象用於非同步(asynchronous)計算.。一個Promise對象代表著一個還未完成,但預期將來會完成的操作。
Promise的幾種狀態:
- pending:初始狀態,即等待操作的執行
- fulfilled:成功的操作
- rejected:失敗的操作
pending的狀態既可以轉為fulfilled,也可以轉為rejected,當狀態發生改變時,promise.then(onFulfilled, onRejected)方法將被調用
Promise的基本用法
1.首先建立一個Promise的執行個體
var promise = new Promise(function(resolve, reject){ //do something if(success){ resolve(value); } else { reject(value); }});
用Promise來封裝非同步函數
Node.js中的IO操作都是非同步,因此在寫非同步程式的過程中容易掉進回調大坑
知道了Promise的基本調用過程,我們就可以用來封裝非同步函數了
1.定義函數
function sendRequest(){ return new Promise(function(resolve, reject){ var req = http.request(options, function(res){ var data = ‘‘; res.on(‘data‘, function(chunk){ data += chunk; }); res.on(‘end‘, function(){ //成功後調用 resolve(data); }); }); req.on(‘error‘, function(err){ //失敗後調用 reject(err); }); req.end(); });}
2.調用函數
sendRequest().then(function(data){ console.log(data);}).catch(function(err){ console.log(err);});
Node.js用ES6原生Promise對非同步函數進行封裝