首页 > 解决方案 > 如何通过 request-promise-native 获得自然解决的承诺

问题描述

request-promise-native在 node.js 上使用模块。我正在调用的 API 通过 GET 返回所需的数据。这工作得很好。

但是,当我尝试从函数中获取数据时,因为它前面有 Async 返回一个 Promise,所以我无法正确获取语法。这是我尝试过的:

const request = require('request-promise-native');

async function usdToEos () {
  const options = {
    method: 'GET'
    ,uri: 'https://api.coincap.io/v2/assets/eos'
    ,json: true
  }
  const response = await request(options)
    .then(response => {
      console.log(response)
      return (1 / response.data.priceUsd)
    })
    .catch(error => {
      console.log('\nCaught exception: ' + error);
    })
}

var usdToEosMul = usdToEos()
console.log('\n' + 'USD multiplier to convert to EOS' + '\n')
console.log(usdToEosMul)

如何让返回的值成为......数据......(1 / response.data.priceUsd)。这在 ...console.log(response) ... 中可见,但在变量 usdToEosMul 中不可见。

标签: javascriptnode.jsrequest-promise

解决方案


因为它前面有一个函数async返回一个承诺

好像你几乎已经回答了你的问题。您将不得不在您的呼叫站点等待该承诺:

usdToEos().then(usdToEosMul => {
  console.log('\n' + 'USD multiplier to convert to EOS' + '\n')
  console.log(usdToEosMul)
}).catch(error => {
  console.log('\nCaught exception: ' + error)
})

function usdToEos() {
  const options = {
    method: 'GET'
    ,uri: 'https://api.coincap.io/v2/assets/eos'
    ,json: true
  }
  return request(options).then(response => {
    console.log(response)
    return (1 / response.data.priceUsd)
  })
}

或者

;(async function() {
  try {
    const usdToEosMul = await usdToEos()
    console.log('\n' + 'USD multiplier to convert to EOS' + '\n')
    console.log(usdToEosMul)
  } catch(error) {
    console.log('\nCaught exception: ' + error)
  }
}())

async function usdToEos() {
  const options = {
    method: 'GET'
    ,uri: 'https://api.coincap.io/v2/assets/eos'
    ,json: true
  }
  const response = await request(options)
  console.log(response)
  return (1 / response.data.priceUsd)
}

推荐阅读