通过asynch-await获取API数据而不是回调

时间:2017-08-15 08:27:14

标签: javascript node.js

我正试图通过kraken-node api自动收报机数据。

我尝试了以下方法:

import KrakenClient from "kraken-api";
const knex = require('knex')(require('../knexfile'))
const kraken = new KrakenClient();

//*********************
//ASYNCH AWAIT EXAMPLE*
//*********************

const tickerAsynch = async function() {
    // Get Ticker Info
    return kraken.api('Ticker', { pair: 'XXBTZUSD' });
};
tickerAsynch().then(data => console.log(data)).catch(err => console.log(err))

//*****************
//CALLBACK EXAMPLE*
//*****************
// Get Ticker Info 

const tickerCallback = function() {
    kraken.api('Ticker', { "pair": 'XXBTZUSD' }, function(error, data) {
        if (error) {
            console.log(error);
        }
        else {
            console.log(data.result);
        }
    })
};

console.log("Callback: " + tickerCallback())

ASYNCH AWAIT EXAMPLE只是给我回复http请求:

  

回调:未定义请求{domain:null,_events:{error:   [功能:界限],        完成:[功能:界限],        pipe:[Function]},_ eventscount:3,_maxListeners:undefined,method:' POST',headers:{' User-Agent':' Kraken   Javascript API客户端',        主持人:' api.kraken.com',        '内容类型':' application / x-www-form-urlencoded',        ' content-length':13},超时:5000,回调:[功能],可读:true,可写:true,explicitMethod:true,_qs:
  请求参数 {        要求:[通告],        lib:{formats:[Object],parse:[Function],stringify:[Function]},        useQuerystring:undefined,        parseOptions:{},        stringifyOptions:{format:' RFC3986' },_ auth:Auth {        要求:[通告],        hasAuth:false,        sentAuth:false,        bearerToken:null,        user:null,        pass:null},_ _ outh:OAuth {request:[Circular],params:null},_ multipart:Multipart {        要求:[通告],        边界:' 839beaf0-e37d-459b-a879-0d1e2b22aab4',        chunked:false,        body:null},_ redirect:Redirect {        要求:[通告],        followRedirect:true,        followRedirects:是的,        followAllRedirects:false,        followOriginalHttpMethod:false,        allowRedirect:[功能],        maxRedirects:10,        重定向:[],        redirectsFollowed:0,        removeRefererHeader:false},_ tunnel:Tunnel {        要求:[通告],        proxyHeaderWhiteList:         ['接受',           '接收字符集&#39 ;,           '编码接受&#39 ;,           '接受语言&#39 ;,           '接受范围,&#39 ;,           '缓存控制&#39 ;,           '内容编码&#39 ;,           '内容语言&#39 ;,           '内容位置&#39 ;,           '内容-MD5&#39 ;,           '内容范围&#39 ;,           '内容类型&#39 ;,           '连接&#39 ;,           '日期&#39 ;,           '期望值&#39 ;,           ' MAX-转发&#39 ;,           '编译&#39 ;,           '引荐&#39 ;,           ' TE&#39 ;,           '用户代理&#39 ;,           '通过' ]        proxyHeaderExclusiveList:[]},setHeader:[Function],hasHeader:[Function],getHeader:[Function],removeHeader:   [功能],localAddress:undefined,pool:{},dests:[],
  __isRequestRequest:true,_callback:[Function],uri:Url {        协议:' https:',        斜线:真的,        auth:null,        主持人:' api.kraken.com',        港口:443,        主机名:' api.kraken.com',        hash:null,        搜索:null,        查询:null,        路径名:' / 0 / public / Ticker',        路径:' / 0 / public / Ticker',        href:' https://api.kraken.com/0/public/Ticker' },proxy:null,tunnel:true,setHost:true,originalCookieHeader:undefined,
  _disableCookies:true, jar:undefined,port:443,host:' api.kraken.com',body:' pair = XXBTZUSD',路径:' / 0 /公共/股票代码&#39 ;,   httpModule:{Server:{[Function:Server] super :[Object]},        createServer:[功能:createServer],        globalAgent:         代理人{           domain:null,           _events:[Object],           _eventsCount:1,           _maxListeners:undefined,           defaultPort:443,           协议:' https:',           选项:[对象],           要求: {},           套接字:{},           freeSockets:{},           keepAliveMsecs:1000,           keepAlive:false,           maxSockets:无限,           maxFreeSockets:256,           maxCachedSessions:100,            sessionCache:[Object]},        代理人:{[功能:代理人]超级:[对象]},        要求:[功能:要求],        get:[Function:get]},agentClass:{[功能:代理]        super_:{[Function:Agent] super_:[Object],defaultMaxSockets:Infinity}},agent:Agent {        domain:null,        _events:{free:[Function]},        _eventsCount:1,        _maxListeners:undefined,        defaultPort:443,        协议:' https:',        选项:{path:null},        要求: {},        套接字:{},        freeSockets:{},        keepAliveMsecs:1000,        keepAlive:false,        maxSockets:无限,        maxFreeSockets:256,        maxCachedSessions:100,        _sessionCache:{map:{},list:[]}}}

然而,我通过回调示例得到了价格:

{ XXBTZUSD: 
   { a: [ '4347.99900', '1', '1.000' ],
     b: [ '4345.00000', '1', '1.000' ],
     c: [ '4354.97000', '0.19747745' ],
     v: [ '74.25674323', '10944.61634833' ],
     p: [ '4391.05837', '4290.88239' ],
     t: [ 314, 31776 ],
     l: [ '4264.00000', '4082.99500' ],
     h: [ '4468.00000', '4484.29000' ],
     o: '4349.98700' } }

我的asynch-await示例中有什么建议我做错了吗?

感谢您的回复!

1 个答案:

答案 0 :(得分:0)

我认为kraken.api需要一个回调并且不会返回一个承诺,你总是可以使用下面的代码用一个承诺包装一个回调

function getKrakenPromise(){
  return new Promise(function(resolve, reject){
            kraken.api('Ticker', { "pair": 'XXBTZUSD' }, function(error, data) {
            if (error) {
                console.log(error);
                reject(error)
            }
            else {
                console.log(data.result);
                resolve(data);
            }
        })
  })
}

然后调用getKrakenPromise()而不是api