JS |从子函数

时间:2017-11-11 21:25:47

标签: javascript arrays function pouchdb

我需要返回一个子函数。

所以我有以下代码并且在Parent函数中需要doc的结果,另外我想返回一个数组,所以我需要复制数组,因为父数组将在子进程之后被删除被关闭了?

感谢您的时间!

function test(){
    var HereINeedTheArray []
    db.allDocs({include_docs: true, descending: true}, function(err, doc) {
       HereINeedTheArray = doc
       return doc //can i get this return or do i need HereINeedTheArray? 
    })
}

2 个答案:

答案 0 :(得分:0)

尝试:

const test = ()=>{
  const HereINeedTheArray = []
  db.allDocs({include_docs: true, descending: true}, function(err, doc) {
   HereINeedTheArray.push(doc)
   return HereINeedTheArray
  })
}

答案 1 :(得分:0)

您的函数对数据库执行异步调用,因此您无法以同步方式返回结果。您必须处理回调中的返回值:

function test(){
    var HereINeedTheArray []
    db.allDocs({include_docs: true, descending: true}, function(err, doc) {
       // logic to handle doc here
    })
}


或者你可以Promisify你的职能:

function test(){
    return new Promise(function(resolve, reject) {
        db.allDocs({include_docs: true, descending: true}, function(err, doc) {
            if (err)
                reject(err);
            resolve(doc);           
        });
    });
}

test.then(function(doc) {
    // handle doc here
})
.catch(function(err) {
    // handle error
});


或者,如果您在async/await> = 7.6或拥有node.js,则可以使用Babel transpiling with ES2017

function _test(){
    return new Promise(function(resolve, reject) {
        db.allDocs({include_docs: true, descending: true}, function(err, doc) {
            if (err)
                reject(err);
            resolve(doc);           
        });
    });
}

async function test() {
    let doc = await _test();
    // handle doc here
}