私は個人的なニーズのためのスクリプトを開発しています。エラーが返された場合は再試行する必要がありますが、修正方法がわかりません。それを解決する方法は?
const request = require("request");
const co = require('co');
function init() {
co(function *(){
var res = yield GetData();
console.log(res);
});
}
function onerror(error) {
console.log("error below");
console.log(error);
console.log(error.code);
console.error(error.stack);
}
function send_request(options, callback){
co(function *(){
let RetryAttemptCount = 0;
let MaxRetries = 3;
let res;
res = yield request(options, function (error, response, body) {
var tmp;
if (!body && error && !response) {
RetryAttemptCount++;
console.log('increase RetryAttemptCount :',RetryAttemptCount);
throw new onerror(error);
} else if (!error) {
tmp = JSON.parse(body);
return tmp;
}
});
}).catch(onerror);
}
function GetData() {
return new Promise(function(resolve, reject){
var options = { method: 'GET', url: 'https://api.upbit.com/v1/market/all' };
send_request(options, (res) => {
resolve(res);
});
});
}
init();
しかし、次のエラーが発生します。
TypeError:関数、promise、generator、array、またはobjectのみを生成できますが、次のオブジェクトが渡されました: "[object Object]"
簡単な再試行機能を使用して、非常に一般的に行うことができます。
function retry(fn, attempts = 3, delay = 2000) {
return async function(...args) {
for(const i = 0; i < attempts; i++) {
try {
await fn.call(this, ...args); // delegate
} catch (e) {
if(attempts-- > 0) await new Promise(r => setTimeout(r, delay));
else throw e;
}
}
}
}
これにより、次のことが可能になります。
let retried = retry(fn);
// ... then later
await retried({ ... params });
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加