多分、私はPromise.promisifyAll
の仕組みを理解していません。私はcoinbaseパッケージを約束しようとしています。Bluebird promisifyすべて非同期関数のセット全体を作成しない
基本的にクライアントの機能は約束されていますが、これらの機能から返されるアカウントにはAsyncバージョン:[TypeError: acc.getTransactionsAsync is not a function]
が含まれていません。
an answer to a similar questionのように、{multiArgs:true}
をPromise.promisifyAll()
に渡してみましたが、問題は解決しませんでした。どんな提案も感謝しています。パッケージ(作品)を使用しての
通常の方法:
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バージョン動作しない(getTransactionsAsync
は未定義ですが、getAccountsAsync
は正しくアカウントを返す):
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:
私が約束したいパッケージを見てみると、私が呼び出しようとしているのは、パッケージによって返されたモデルオブジェクトです。私はpromisifyAll
はクライアント機能だけを解析し、モデルは処理されていないと思う。私はちょうどそれだけでなく、解析が行われている方法に精通していないよ:(
これは(モジュールがエクスポート)index.js
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である:それはクライアントが必要と
そのモデルのモジュールであるので、Promise.promisifyAll
は、以前の編集を妨げずにオブジェクトのプロパティを期待どおりにする必要があります。この時点では、私が必要とするすべての機能に対して自分の約束をするという選択肢はないでしょう。クライアント。
私はたくさんの 'new Promise(...)'関数を作成しないようにしようとしていますが、これまでにこの問題を解決する方法は他にありません。 – Fdo