【问题标题】:how to get response in variable not callback in node js [duplicate]如何在节点js中获得变量而不是回调的响应[重复]
【发布时间】:2019-07-06 10:32:08
【问题描述】:

我需要调用外部 api 并发送正文数据并重新处理。

我试试:

var data = {};
data['data'] = {};
data['data']['access_token'] = '123456';
data['data']['secret_key'] = '456897';
data['data']['pincode'] = '457821';

var options = {
    "headers": { "content-type": "application/json" },
    "url": "http://example.com/api.php",
    "body": JSON.stringify(data)
};

const getChuckNorrisFact = util.promisify(Request);
getChuckNorrisFact(options).then(data => {
    let content = JSON.parse(data.body);
    console.log('Joke: ', data.body);   
}).catch(err => console.log('error: ', err))

console.log(getChuckNorrisFact);

我想在getChuckNorrisFact 变量中得到响应。

【问题讨论】:

  • @jonrsharpe 它不是重复的,它不是关于 ajax 或 JavaScript 它是关于 node.js,你不知道 Node.js 然后离开它。
  • 节点 is JavaScript... 请阅读 建议的副本,它仔细解释了这类一般问题以及处理它的各种方法.
  • 你不能做你想做的事。异步承诺结果仅在 .then() 回调或您从那里调用的函数中可用(这是时间问题)。如果需要,您可以将此代码包装在一个函数中并使用await,但这仍然不允许您将值分配给更高范围的变量并按照您尝试的方式使用它。您将需要学习如何在 Javascript 中正确进行异步编程(在浏览器或 node.js 中使用相同的技术)。阅读你的问题被标记为重复 - 那里描述了从回调中获取值的所有技术。
  • 可以用其他方法吗?? @jfriend00
  • 没有。在传递到的回调中使用异步值。这就是您在 Javascript 中为异步操作编程的方式。您可以阅读有关 asyncawait 的信息,这是一种不同的语法,但您仍然需要了解正确的异步编程。只需将想要使用getChuckNorrisFact() 响应的代码放在.then() 回调中。你就是这样做的。

标签: node.js callback request


【解决方案1】:

试试下面的代码:

var data = {};
data['data'] = {};
data['data']['access_token'] = '123456';
data['data']['secret_key'] = '456897';
data['data']['pincode'] = '457821';

var options = {
    "headers": { "content-type": "application/json" },
    "url": "http://example.com/api.php",
    "body": JSON.stringify(data)
};

const request = util.promisify(Request);
request(options).then(data => {
    let getChuckNorrisFact = JSON.parse(data.body);
    console.log(getChuckNorrisFact);
}).catch(err => console.log('error: ', err))

或者不用将request模块转成promise,可以直接使用:https://www.npmjs.com/package/request-promise

ps:我没有试过代码,所以可能需要一些修改。 希望这会有所帮助:)

【讨论】:

    猜你喜欢
    • 2021-04-18
    • 1970-01-01
    • 2019-11-09
    • 2015-10-25
    • 1970-01-01
    • 2015-06-07
    • 2017-09-24
    • 2012-09-22
    • 2018-01-30
    相关资源
    最近更新 更多