第一種 使用回調函數:
function getData(callback){setTimeout(function(){var name = 'xxxx';callback(name);}, 1000);
}// 外部獲取異步方法里面的數據 采用回調函數的方式
getData(function(data){console.log(name);
});
第二種方式 事件觸發:
var fs=require('fs');
var events=require('events');var EventEmitter=new events.EventEmitter();function getMime(){fs.readFile('t1.js',function(err,data){console.log(3);EventEmitter.emit('data',data)})}
console.log(1);
getMime();
console.log(2);EventEmitter.on('data',function(mime){console.log(mime.toString());
})
console.log(4);
第三種 使用Promise
var fs = require('fs');
function getData(){return new Promise((resolve, reject)=>{fs.readFile('t1.js', (err, data)=>{if(err){reject(data);console.log('read fail');} else {resolve(data);}});});
}getData().then((data)=>{console.log(data.toString());
});
// Promiese 可以把定義好的異步函數 放入Promise里面作為參數, 然后用then獲取異步函數的數據
記錄一下:
async 會將其后的函數(函數表達式或 Lambda)的返回值封裝成一個 Promise 對象,而 await 會等待這個 Promise 完成,并將其 resolve 的結果返回出來。