以加法為例细溅,現(xiàn)有遠(yuǎn)程API的模擬實(shí)現(xiàn) addRemote
const addRemote = async (a, b) => new Promise(resolve => {
setTimeout(() => resolve(a + b), 1000)
})
請(qǐng)實(shí)現(xiàn)本地的add方法褥傍,調(diào)用addRemote,能最優(yōu)的實(shí)現(xiàn)輸入數(shù)字的加法喇聊。
async function add(...inputs) {
let sum=0;
for(var i=0;i<inputs.length;i++){
sum= await addRemote(sum,inputs[i])
}
return sum;
}
請(qǐng)用示例驗(yàn)證運(yùn)行結(jié)果:
add(1, 2)
.then(result => {
console.log(result) // 3
})
add(3, 5, 2)
.then(result => {
console.log(result) // 10
})
add方法實(shí)現(xiàn)
async function add(...inputs) {
// 你的實(shí)現(xiàn)
}
nodejs utils.promisify 接受error first的回調(diào)函數(shù)為參數(shù)異步函數(shù)轉(zhuǎn)換為可以返回promise的函數(shù)
// fs.loadFile 使用演示
fs.loadFile('./xxx/x.md', (err, data) => {
if(err) {
console.log(err)
} else {
console.log(data)
}
})
promisify函數(shù)包裝后演示
// fs.loadFile('./xxx.md').then(data => {}).catch(err => {})
const loadFile = utils.promisify(fs.loadFile);
loadFile('./xxxx.md').then(data => {}).catch(err => {});
請(qǐng)實(shí)現(xiàn)
// 請(qǐng)實(shí)現(xiàn)
utils.promisify = function (fn) {
return function (path) {
return new Promise((res, rej) => {
fn(path, (err, data) => {
if (err) {
res(err);
} else {
res(data);
}
})
})
}
};```