Promisify 與 Callbackify — 你或許用不到,但了解一下也無妨

JavaScript 中有兩種風格迥異的呼叫非同步函數方法,分別是 Callback 與 Promise ,由於時空背景所限,早期的 API 設計往往是前者的回呼風格,這點在 Node 中尤其明顯,在時代交迭的溝渠中…

直接開始

dosomethingAsync(callback); // 非同步出去 完成後呼叫callback
function callback (err,result){
if(err) {
console.log(err);
return;
}
// 操作result之類的
console.log(result);
}
doSomethingAsync(callback)
fs.readFile('/etc/passwd', (err, data) => {
if (err) throw err;
console.log(data);
});

Promisify

const fs = require('fs')
const promisify = require('util').promisify;
const readFileAsync = promisify(fs.readFile);
readFileAsync('/etc/passwd').then( data =>{
// do something with data
}).catch( error =>{
// handle the error
})
// setTimeout不是一個 error first 風格的函數
// 而且 callback 並非最後一個參數
setTimeout( callback , time )
const sleep = promisify( (ms,cb) => setTimeout(cb,ms) );
sleep(3000).then(()=>console.log('3 sec pass'));

Callbackify

const util = require('util');

async function fn() {
return 'hello world';
}
const callbackFunction = util.callbackify(fn);

callbackFunction((err, ret) => {
if (err) throw err;
console.log(ret);
});

結論

If any interest, 👉 https://realdennis.me.

If any interest, 👉 https://realdennis.me.