在javascript中从管道函数内部获取Axios响应

在javascript中从管道函数内部获取Axios响应,javascript,axios,Javascript,Axios,您好,现在我正试图通过API将媒体上传到Twitter,为此,我需要一个来自之前axios调用的值 这是初始化媒体上载的API调用: async function uploadMediaInit(fd) { var fHeader = fd.getHeaders(); return fd.pipe(concat((data) => { axios({ method : 'post', url : 'https://upload.twitter.com

您好,现在我正试图通过API将媒体上传到Twitter,为此,我需要一个来自之前axios调用的值

这是初始化媒体上载的API调用:

async function uploadMediaInit(fd) {
  var fHeader = fd.getHeaders();
  return fd.pipe(concat((data) => {
    axios({
      method : 'post',
      url : 'https://upload.twitter.com/1.1/media/upload.json', 
      data,
      
      headers: {
        'content-type' : fHeader['content-type'],
        Authorization : getAuthorization('POST','https://upload.twitter.com/1.1/media/upload.json',{},"top-secret","top-secret")
      }
    })
    
  }))}
类似于“response=wait uploadMediaInit(exampleFormData)”的内容会返回一个ConcatStream对象。

如何获取axios响应?

fd.pipe
方法周围包装一个
Promise
,然后从函数返回。这样,您就可以在axios请求完成时解决承诺问题

concat
函数中,使用
async/await
等待axios请求以获得响应。然后用从请求中得到的响应来解析承诺,您的值将在函数之外可用

function uploadMediaInit(fd) {
  var fHeader = fd.getHeaders();
  return new Promise(resolve => {
    fd.pipe(concat(async (data) => {
      const response = await axios({
        method: 'post',
        url: 'https://upload.twitter.com/1.1/media/upload.json',
        data,
        headers: {
          'content-type': fHeader['content-type'],
          Authorization: getAuthorization('POST', 'https://upload.twitter.com/1.1/media/upload.json', {}, "top-secret", "top-secret")
        }
      });
      resolve(response);
    }));
  });
}