JS |从子函数中获取 return

JS | Get return from sub Function

我需要获取子函数的return。

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

感谢您的宝贵时间!

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? 
    })
}

尝试:

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

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

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 if you are on node.js >= 7.6 or have 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
}