正确同步调用函数的方法

时间:2017-03-24 20:27:37

标签: node.js es6-promise synchronous

让我首先说我知道async / await但我真的不想包括babel,这似乎很麻烦,我没有任何问题坚持承诺。所以我想要做的是非常简单, 基本上实现了同步'在我的功能中流动。

下面的代码给出了一个未处理的异常。我想听听有什么想法,如果可能的话,我是否在这里走上正轨。如果您有任何疑问,请继续询问。

function A()
{
    //...
    result = B();
    Promise.all(result).then(function(result){
        //after finishing B continue
    });
}

function B()
{
    //..
    C();
    return number;
}

function C()
{
    var data1;
    var data2;
    //..
    calling_DB = DB_get(..., function(result){ data1 = ..;});//callback cause I ma fetching data from DB
    Promise.all(data1).then(function(data1){
        calling_DB2 = DB_get(..., function(result){ data2 = ..;});
        Promise.all(data2).then(function(data2){
            //...
        });
    });
}

1 个答案:

答案 0 :(得分:1)

您可以按照以下方法在链中调用这些功能

function A()
{
    return B()
        .then(function(_merged_db_get_results)
        {
            //after finishing B continue

            console.dir(_merged_db_get_results);

            return true;
        })
        .catch(function(error)
        {
            console.dir(error);
            return false;
        });
}

function B()
{
    return C()
        // Can be removed : START
        .then(function(_merged_db_get_results)
        {
            return _merged_db_get_results;
        });
        // Can be removed : END
}

function C()
{
    var db_1_res;

    return Promise.resolve(true)
        .then(function(_above_true)
        {
            return DB_get(condition);
        })
        .then(function(_db_get_results_1)
        {
            db_1_res = _db_get_results_1;

            return DB_get(condition);
        })
        .then(function(_db_get_results_2)
        {
            return [db_1_res, _db_get_results_2];
        });
}