私はpromisモジュールを使用してリクエストモジュールからjsonデータを返しますが、実行するたびにこれが表示されます。
Promise { _45: 0, _81: 0, _65: null, _54: null }
私はそれを動作させることができません、誰も問題を知っていますか?ここに私のコードがあります:
function parse(){
return new Promise(function(json){
request('https://bitskins.com/api/v1/get_account_balance/?api_key='+api+'&code='+code, function (error, response, body) {
json(JSON.parse(body).data.available_balance);
});
});
}
console.log(parse());
約束は、将来の価値のプレースホルダーとして機能するオブジェクトです。 parse()
関数は、そのpromiseオブジェクトを返します。次のように.then()
ハンドラーをpromiseにアタッチすることにより、そのpromiseの将来の値を取得します。
_function parse(){
return new Promise(function(resolve, reject){
request('https://bitskins.com/api/v1/get_account_balance/?api_key='+api+'&code='+code, function (error, response, body) {
// in addition to parsing the value, deal with possible errors
if (err) return reject(err);
try {
// JSON.parse() can throw an exception if not valid JSON
resolve(JSON.parse(body).data.available_balance);
} catch(e) {
reject(e);
}
});
});
}
parse().then(function(val) {
console.log(val);
}).catch(function(err) {
console.err(err);
});
_
これは非同期コードなので、promiseから値を取得する唯一の方法は、.then()
ハンドラーを使用することです。
変更のリスト:
.then()
ハンドラーを追加して、最終結果を取得します。.catch()
ハンドラーを追加します。request()
コールバックのerr
値のエラーチェックを追加します。JSON.parse()
の周りにtry/catchを追加しますrequest-promise を使用します。
var rp = require('request-promise');
rp('http://www.google.com')
.then(function (response) {
// resolved
})
.catch(function (err) {
// rejected
});