在nodeJs中的承诺,我如何获得返回值?

时间:2016-10-06 14:53:58

标签: javascript node.js

我从远程表中获取值,我将其推入数组:

function getrecords(base, view) {
    var tab = []; 
    var jsonTab = {};
    base('Table 1').select({
        view: view
    }).eachPage(function page(records, fetchNextPage) {
        records.forEach(function(record) {
            tab.push({
                'Name':record.get('Name'),
                'Notes': record.get('Notes')
            });
        });
        //console.log(tab); 
        return tab;
    });
}

现在,使用promiseJs我做了一个promise函数,因为调用是异步的:

function readRecords(base, view){
    return new Promise(function(fulfill, reject){
        getrecords(base, view, function (err, res){
            if(err) reject(err);
            else fulfill(res);
        });
        });
}

现在我要做的就是使用该标签! 但是当我创建一个像这样的var并且控制台记录它时:

var tabRecord= readRecords(base, view); 
console.log(tabRecord); 

这是cmd中的结果:

承诺{_45:0,_81:0,_65:null,_54:null}

它的意思是什么?为什么我没有显示标签?我该怎么做才能获得函数的返回值?

谢谢大家。

ps:我帮助mysefl使用这个网站https://www.promisejs.org/来写下这个承诺。

2 个答案:

答案 0 :(得分:2)

您将参数用于传递then的回调:

readRecords(base, view).then(function(tabRecord) {
    // Use `tabRecord` here
});

Promise不会使异步代码同步。它们只是使异步代码更易于使用。

答案 1 :(得分:0)

Getrecords应该返回一个承诺,所以我做了:

function getrecords(base, view) {
    return new Promise(function(resolve, reject){
        var tab = []; 
        base('Table 1').select({
            view: view
        }).eachPage(function page(records, fetchNextPage) {
            records.forEach(function(record) {
            //resolve(records);
                tab.push({
                    'Name':record.get('Name'),
                    'Notes': record.get('Notes')
                });
            });
            fetchNextPage();
            resolve(tab);
            reject("Nononono");
        });
    });
}

之后,我可以像这样调用“then”之后的方法:

getrecords(base, view).then(function(res){return res;}).then(function(res{tabToCSV(res)})

有效。