Node.js - 调用异步方法而不使用nodejs中的promise第三方库

时间:2017-05-16 03:29:26

标签: javascript node.js promise

我是Node.js编程的新手。我开始了解承诺对象。但我的一位同事面临一个面试问题。

  1. 不使用npm中可用的任何第三方承诺库(例如Promise,bluebird),我需要实现一个promise函数,它返回then()和catch()函数,如下所示。

    asyncPromise()。然后()。赶上()

  2. 例如:

    function asyncFunction(cb){
        //-----------
        cb(err,data);
    }
    
    function asyncPromise(){
    }
    

    我们需要围绕该函数包装一个函数,它将使其表现为一个promise。如何在不使用第三方库的情况下使用上述两种功能实现这一目标?

1 个答案:

答案 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
}