Node.js,异步模块用法;无法正确订购回调

时间:2019-04-01 03:44:03

标签: node.js mongodb async.js

嗯,我是node.js的新手。当我尝试从数据库中获取一些数据时,API将在流程完成之前返回。以下是我们的代码示例,

this.getData = (userId, status, parameters, callback) => {
        console.log('getData:-:Start');
        const finalArray = [];
        async.series([
            (cb) => {
                console.log('getData:-:Fetch Data1:-:Start');
                **************************************** 
                ***Fetch data using find and populate*** 
                **************************************** {
                    if (!error) {
                        if (data.length > 0) {
                            ***************
                            ***More Code***
                            *************** 
                                const finalObject = {
                                    *****************************
                                    ***Set data to finalObject***
                                    *****************************
                                };
                                finalArray.push(finalObject);
                            }
                            console.log('getData:-:Fetch Data1:-:End');
                        } else {
                            return cb(null, {
                                data: [],
                                status: {
                                    message: 'No Data1',
                                    status: '202'
                                }
                            });
                        }
                    }
                    return cb(error, null);
                });
            }, (cb) => {
                console.log('getData:-:Fetch Data2:-:Start');
                ********************************
                ***Fetch data using aggregate***
                ********************************
                    if (!error) {
                        if (aggregateData.length > 0) {
                            async.eachSeries(aggregateData, function (aggregateItem, innercb) {
                                ***************************
                                ***Fetch data using find***
                                ***************************
                                    if (!err && findData.length > 0) {
                                        ***************
                                        ***More Code***
                                        ***************
                                            const finalObject = {
                                                *****************************
                                                ***Set data to finalObject***
                                                *****************************
                                            };
                                            finalArray.push(finalObject);
                                        }
                                    }
                                    innercb(null);
                                })
                            }, function () {
                            });
                            console.log('getData:-:Fetch Data2:-:End');
                        } else {
                            return cb(null, {
                                aggregateData: [],
                                status: {
                                    message: 'No Data2',
                                    status: '202'
                                }
                            });
                        }
                    }
                    return cb(error, null);
                });
            }], (err, data) => {
            if (!err) {
                data = finalArray
                console.log('getData:-:data = ', data);
                console.log('getData:-:finalArray:-:Final = ', finalArray);
                callback(data, STATUS('SC200', 'Fetched data successfully'));
            } else {
                callback(STATUS('SC202', 'Error in fetching data', err));
            }
        });

    };

在上述情况下,仅从cb中的第一个async.series(回调)获取数据。如何在第二个innercb中包含来自与async.series关联的cb的数据?

我尝试看过类似的文章,但无济于事。抱歉,如果我的问题太天真了。感谢您的帮助。

0 个答案:

没有答案