【发布时间】:2020-02-04 21:46:18
【问题描述】:
尝试在nodejs中使用async和await做http请求,但是出错了。有任何想法吗?谢谢
got response:
undefined
/home/tom/learn/node/node_modules/node-rest-client/lib/node-rest-client.js:539
callback(parsedData,res);
^
TypeError: callback is not a function
at /home/tom/learn/node/node_modules/node-rest-client/lib/node-rest-client.js:539:13
at Object.parse (/home/tom/learn/node/node_modules/node-rest-client/lib/nrc-parser-manager.js:151:3)
at ConnectManager.handleResponse (/home/tom/learn/node/node_modules/node-rest-client/lib/node-rest-client.js:538:32)
at ConnectManager.handleEnd (/home/tom/learn/node/node_modules/node-rest-client/lib/node-rest-client.js:531:18)
at IncomingMessage.<anonymous> (/home/tom/learn/node/node_modules/node-rest-client/lib/node-rest-client.js:678:34)
at emitNone (events.js:110:20)
at IncomingMessage.emit (events.js:207:7)
at endReadableNT (_stream_readable.js:1059:12)
at _combinedTickCallback (internal/process/next_tick.js:138:11)
at process._tickCallback (internal/process/next_tick.js:180:9)
这里是脚本的源代码
var Client = require('node-rest-client').Client;
var client = new Client();
async function test1() {
response = await client.get("http://localhost/tmp.txt");
console.log("got response: ");
console.log(response.headers);
};
test1();
nodejs 版本为 v8.4.0,在 ubuntu 14.04 上。
【问题讨论】:
-
async/await不只是神奇地使用期望回调的函数。如果client.get()期望回调作为参数,则如果要使用它,则必须传递回调。async/await使用返回承诺的异步操作,它们对这些承诺进行操作。它们不会神奇地让您跳过将回调传递给为回调设计的函数。我建议阅读更多有关如何实际使用async和await的内容。 -
一般来说,
async/await的路径是首先将所有异步操作设计为使用 Promise 和.then()处理程序。然后,在所有工作正常之后,您可以将返回承诺的函数声明为async,然后您可以使用await调用这些函数,而不是使用.then()处理程序。这里没有神奇的捷径。从承诺设计开始。 -
谢谢。所以我们不能只以这种方式使用第三方函数,除非它是专门为 Promise 设计的?
-
是的,没错。 async/await 使用返回承诺的异步操作,而不是使用回调的异步操作。请阅读有关它们的更多信息并研究使用它们的代码示例。
-
谢谢@jfriend00!
标签: node.js asynchronous