Node.js 承诺请求返回

Posted

技术标签:

【中文标题】Node.js 承诺请求返回【英文标题】:Node.js promise request return 【发布时间】:2017-05-15 17:10:19 【问题描述】:

我正在使用 promis 模块从请求模块返回我的 json 数据,但是每次我运行它时,它都会给我这个。

Promise  _45: 0, _81: 0, _65: null, _54: null 

我不能让它工作,有人知道问题吗?这是我的代码:

function parse()
return new Promise(function(json)
    request('https://bitskins.com/api/v1/get_account_balance/?api_key='+api+'&code='+code, function (error, response, body) 
        json(JSON.parse(body).data.available_balance);
    );
);


console.log(parse());

【问题讨论】:

Promises 返回一个 Promise,一个它将在稍后用一些数据解析 (.then) 或拒绝 (.catch) 的合约。我建议阅读它们。您记录返回的承诺。您的请求此时尚未返回。 【参考方案1】:

promise 是一个对象,用作未来值的占位符。您的 parse() 函数返回该承诺对象。您可以通过将 .then() 处理程序附加到 Promise 中来获得该 Promise 中的未来值,如下所示:

function parse()
    return new Promise(function(resolve, reject)
        request('https://bitskins.com/api/v1/get_account_balance/?api_key='+api+'&code='+code, function (error, response, body) 
            // in addition to parsing the value, deal with possible errors
            if (err) return reject(err);
            try 
                // JSON.parse() can throw an exception if not valid JSON
                resolve(JSON.parse(body).data.available_balance);
             catch(e) 
                reject(e);
            
        );
    );


parse().then(function(val) 
    console.log(val);
).catch(function(err) 
    console.err(err);
);

这是异步代码,因此从 Promise 中获取值的唯一方法是通过 .then() 处理程序。

修改列表:

    在返回的 promise 对象上添加 .then() 处理程序以获得最终结果。 在返回的 promise 对象上添加 .catch() 处理程序以处理错误。 在request() 回调中添加对err 值的错误检查。 在 JSON.parse() 周围添加 try/catch,因为如果 JSON 无效,它会抛出

【讨论】:

【参考方案2】:

使用request-promise:

var rp = require('request-promise');

rp('http://www.google.com')
    .then(function (response) 
        // resolved
    )
    .catch(function (err) 
        // rejected
    );

【讨论】:

以上是关于Node.js 承诺请求返回的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 promise 将数组从我的模块返回到我的 API?异步函数和承诺 - Node.js

Node.js 从函数返回一个承诺

Node.js / Javascript 多重递归承诺在视图中返回

如何在 node.js 中解决可变数量的承诺

在 node.js 中承诺一个递归函数

在 Node.js 承诺的环境中监控挂起的异步操作