我正在寻找一种在https帖子中使用异步/等待的方法。请帮帮我。我已经在下面发布了我的https邮政编码片段。我该如何使用异步等待。
const https = require('https')
const data = JSON.stringify({
todo: 'Buy the milk'
})
const options = {
hostname: 'flaviocopes.com',
port: 443,
path: '/todos',
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Content-Length': data.length
}
}
const req = https.request(options, (res) => {
console.log(`statusCode: ${res.statusCode}`)
res.on('data', (d) => {
process.stdout.write(d)
})
})
req.on('error', (error) => {
console.error(error)
})
req.write(data)
req.end()
答案 0 :(得分:1)
我也遇到了这个问题,找到了这篇文章,并使用了瑞诗凯诗·达兰德勒(here)的解决方案。
await文档指出 await运算符用于等待Promise 。不需要从函数返回promise。您可以创建一个承诺并在其上等待。
async function doPostToDoItem(myItem) {
const https = require('https')
const data = JSON.stringify({
todo: myItem
});
const options = {
hostname: 'flaviocopes.com',
port: 443,
path: '/todos',
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Content-Length': data.length
},
};
let p = new Promise((resolve, reject) => {
const req = https.request(options, (res) => {
res.setEncoding('utf8');
let responseBody = '';
res.on('data', (chunk) => {
responseBody += chunk;
});
res.on('end', () => {
resolve(JSON.parse(responseBody));
});
});
req.on('error', (err) => {
reject(err);
});
req.write(data)
req.end();
});
return await p;
}
答案 1 :(得分:0)
您只能将async-await与Promises一起使用,并且Node的核心https模块没有内置的 promise 支持。因此,您首先必须将其转换为 promise 格式,然后才能对其使用async-await。
https://www.npmjs.com/package/request-promise
此模块已将核心http模块转换为承诺版本。您可以使用它。
答案 2 :(得分:0)
基本上,您可以编写一个将返回Promise
的函数,然后可以对该函数使用async
/ await
。请看下面:
const https = require('https')
const data = JSON.stringify({
todo: 'Buy the milk'
});
const options = {
hostname: 'flaviocopes.com',
port: 443,
path: '/todos',
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Content-Length': data.length
},
};
async function doSomethingUseful() {
// return the response
return await doRequest(options, data);
}
/**
* Do a request with options provided.
*
* @param {Object} options
* @param {Object} data
* @return {Promise} a promise of request
*/
function doRequest(options, data) {
return new Promise((resolve, reject) => {
const req = https.request(options, (res) => {
res.setEncoding('utf8');
let responseBody = '';
res.on('data', (chunk) => {
responseBody += chunk;
});
res.on('end', () => {
resolve(JSON.parse(responseBody));
});
});
req.on('error', (err) => {
reject(err);
});
req.write(data)
req.end();
});
}