我是Node.js编程的新手。我开始了解承诺对象。但我的一位同事面临一个面试问题。
不使用npm中可用的任何第三方承诺库(例如Promise,bluebird),我需要实现一个promise函数,它返回then()和catch()函数,如下所示。
asyncPromise()。然后()。赶上()
例如:
function asyncFunction(cb){
//-----------
cb(err,data);
}
function asyncPromise(){
}
我们需要围绕该函数包装一个函数,它将使其表现为一个promise。如何在不使用第三方库的情况下使用上述两种功能实现这一目标?
答案 0 :(得分:0)
Promise内置于节点中,最新版本的节点已实现对async / await函数的支持。这有两种方法可以做他们想做的事。我更喜欢第二种方法。
function asyncFunc(){
return new Promise((resolve, reject) => {
if(someError){
// triggers .catch callback
return reject('There was an error');
}
// triggers .then callback
return resolve();
});
}
asyncFunc.then(() => { /* do something */ }).catch(e => { // do something });
使用async / await
function asyncFunc(){
return new Promise((resolve, reject) => { resolve() });
}
async function caller(){
let dataFromPromise;
try{
dataFromPromise = await asyncFunc();
} catch(e){
// do something with error
}
// do something with dataFromPromise
}