Vielleicht verstehe ich nicht die Art und Weise Promise.promisifyAll
funktioniert. Ich versuche, coinbase Paket zu promitifizieren.Bluebird promisifyAlle nicht erstellen ganze Reihe von Async-Funktionen
Grundsätzlich werden die Funktionen des Clients zugesagt, aber die von diesen Funktionen zurückgegebenen Konten scheinen nicht die Async Version: [TypeError: acc.getTransactionsAsync is not a function]
zu haben.
Ich habe versucht, {multiArgs:true}
als Optionen zu Promise.promisifyAll()
wie in an answer to a similar question vorgeschlagen, aber es hat das Problem nicht gelöst. Jeder Vorschlag wird geschätzt.
Normalweg das Paket der Verwendung (Werke):
var Client = require('coinbase').Client
var client = new Client({
'apiKey': '<snip>',
'apiSecret': '<snip>',
'baseApiUri': 'https://api.sandbox.coinbase.com/v2/',
'tokenUri': 'https://api.sandbox.coinbase.com/oauth/token'
});
//Callbacks
client.getAccounts({}, function(err, accounts) {
accounts.forEach(function(acc) {
acc.getTransactions(null, function(err, txns) {
txns.forEach(function(txn) {
console.log('txn: ' + txn.id);
});
});
});
});
Promisified Version funktioniert nicht (getTransactionsAsync
nicht definiert ist, aber die getAccountsAsync
kehrt die Konten korrekt):
var Promise = require('bluebird');
var Client = require('coinbase').Client;
var client = new Client({
'apiKey': '<snip>',
'apiSecret': '<snip>',
'baseApiUri': 'https://api.sandbox.coinbase.com/v2/',
'tokenUri': 'https://api.sandbox.coinbase.com/oauth/token'
});
Promise.promisifyAll(client);
//Promises
client.getAccountsAsync({}) //Works perfectly, returns the accounts
.then(function(accounts) {
return Promise.map(accounts, function(acc) {
return acc.getTransactionsAsync(null); //This function call is throwing the TypeError
});
})
.then(function(transactions) {
console.log('Transactions:');
transactions.forEach(function(tx) {
console.log(tx);
});
})
.catch(function(err) {
console.log(err);
});
EDIT:
Blick durch das Paket möchte ich versprechen, realisierte ich, dass die Funktion Anweisungen, die ich aufrufen möchte, stammen von den Modellobjekten, die vom Paket zurückgegeben werden. Ich denke, promisifyAll
analysiert nur die Clientfunktionen, und die Modelle werden nicht verarbeitet. Ich bin einfach nicht so gut auskennen, wie die Analyse gemacht :(
Das sind die index.js ist (Modul exportiert)
var Account = require('./lib/model/Account.js'),
Address = require('./lib/model/Address.js'),
Buy = require('./lib/model/Buy.js'),
Checkout = require('./lib/model/Checkout.js'),
Client = require('./lib/Client.js'),
Deposit = require('./lib/model/Deposit.js'),
Merchant = require('./lib/model/Merchant.js'),
Notification = require('./lib/model/Notification.js'),
Order = require('./lib/model/Order.js'),
PaymentMethod = require('./lib/model/PaymentMethod.js'),
Sell = require('./lib/model/Sell.js'),
Transaction = require('./lib/model/Transaction.js'),
User = require('./lib/model/User.js'),
Withdrawal = require('./lib/model/Withdrawal.js');
var model = {
'Account' : Account,
'Address' : Address,
'Buy' : Buy,
'Checkout' : Checkout,
'Deposit' : Deposit,
'Merchant' : Merchant,
'Notification' : Notification,
'Order' : Order,
'PaymentMethod' : PaymentMethod,
'Sell' : Sell,
'Transaction' : Transaction,
'User' : User,
'Withdrawal' : Withdrawal
};
module.exports = {
'Client' : Client,
'model' : model
};
EDIT 2:
Der Kunde es verlangt Eigene Modell-Module, also Promise.promisifyAll
sollten wie erwartet mit den Eigenschaften des Objekts ohne vorhergehende Bearbeitung interferieren.An dieser Stelle denke ich, dass es keine andere Möglichkeit geben könnte, meine eigenen Versprechungen für alle Funktionen zu machen, die ich nicht direkt unter der leben will Client
Ich versuche zu vermeiden, viele 'neue Promise (...)' Funktionen zu erstellen, aber ich kann keine andere Möglichkeit finden, dieses Problem zu lösen. – Fdo