gpt4 book ai didi

node.js - 不能用 async 和 await 做 http 请求

转载 作者:行者123 更新时间:2023-12-03 12:16:34 27 4
gpt4 key购买 nike

试图在 nodejs 中使用 asyncawait 做 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 与返回 promise 的异步操作一起工作,并且它们对这些 promise 进行操作。它们不会神奇地让您跳过将回调传递给为回调设计的函数。我建议多读一些关于如何实际使用 asyncawait 的文章。

一般来说,async/await 的路径是首先设计所有的async 操作以使用 promises 和 .then() 处理程序.然后,在一切正常之后,您可以将一个函数声明为要在其中使用 await 的异步函数,然后在这些异步声明的函数中,您可以调用使用 await 而不是使用 .then()< 返回 promise 的函数 处理程序。这里没有神奇的捷径。从 promise 设计开始。

这是一个简单的 promise 示例:

// asynchronous function that returns a promise that resolves to
// the eventual async value
function delay(t, val) {
return new Promise(resolve => {
setTimeout(() => {
resolve(val);
}, t);
});
}


function run() {
return delay(100, "hello").then(data => {
console.log(data);
return delay(200, "goodbye").then(data => {
console.log(data);
});
}).then(() => {
console.log("all done");
});
}

run();

并且,这里同样适用于 async/await:

// function returning a promise declared to be async
function delay(t, val) {
return new Promise(resolve => {
setTimeout(() => {
resolve(val);
}, t);
});
}

async function run() {
console.log(await delay(100, "hello"));
console.log(await delay(200, "goodbye"));
console.log("all done");
}

run();

这两个示例都产生相同的输出和相同的输出时间,因此希望您能看到从 promises 到 async/await 的映射。

关于node.js - 不能用 async 和 await 做 http 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46142289/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com