2016-02-10 212 views
0

所以我有這方面的工作PouchDB查詢打印出結果到控制檯:PouchDB:返回查詢()結果對象

getActiveProjects(); 

function getActiveProjects() { 
    function map_allActivePrj(doc) {emit(doc.projectStatus);} 

    db.query(map_allActivePrj, { 
     key   : '1', 
     include_docs : true 
    }).then(function (result) { 
     // handle result 
     console.log(JSON.stringify(result.rows, null, 4));   
    }).catch(function (err) { 
     // handle errors 
    }); 
} 

現在我想從其他函數中調用這個函數,並返回結果。我無法做到這一點。我知道結果在查詢範圍內。

請辭的「db.query」前一個「回」如果我把它打印出來與返回一個空對象:

console.log(JSON.stringify(getActiveProjects())); 

我不知道這是否是一個好主意,使該功能。我應該在「//句柄結果」部分寫下我的代碼嗎?

回答

1

您無法從異步函數返回同步值。相反,你可以使用一個回調:

function getActiveProjects(cb) { 
    ... 
    }).then(function(result) { 
    // do stuff 
    cb(result); 
    }).catch(... 
} 

getActiveProjects(function(result) { 
    console.log(JSON.stringify(result)); 
}); 

,或者返回一個承諾,並用它來檢索值:

function getActiveProjects() { 
    ... 
    return db.query(map_allActivePrj, { 
    key: '1', 
    include_docs: true 
    }).then(function(result) { 
    // do stuff 
    return Promise.resolve(result); 
    }).catch(... 
} 

getActiveProjects().then(function(result) { 
    console.log(JSON.stringify(result)); 
}); 
+0

謝謝您的快速答覆。我現在就試試。我假設代碼的異步運行存在問題。 – VapoRizer