#node.js #http #request #fetch
Вопрос:
Я запускаю этот код, я хочу немедленно отправить запрос, но после того, как будет выполнен цикл for. Я хочу заниматься другими делами в цикле и не ждать ответов. Я буду реагировать на ответы, когда бы они ни пришли
var fetchUrl = require("fetch").fetchUrl; for (var i = 0; i lt; 10; i ) { console.log(i); checkbalance(i); } function checkbalance(req) { var urlCheckBalance = "https://api.etherscan.io/api?module=accountamp;action=balancemultiamp;address=" req "amp;tag=latestamp;apikey=lt;api keygt;"; // source file is iso-8859-15 but it is converted to utf-8 automatically fetchUrl(urlCheckBalance, function (error, meta, body) { console.log(body.toString()); }); }
ответ здесь: сгенерировать все порядковые номера. после этого беги за мной.
0 1 2 3 4 5 6 7 8 9 {"status":"0","message":"NOTOK","result":"Error! Invalid address format"} {"status":"0","message":"NOTOK","result":"Error! Invalid address format"} {"status":"0","message":"NOTOK","result":"Error! Invalid address format"} {"status":"0","message":"NOTOK","result":"Max rate limit reached"} {"status":"0","message":"NOTOK","result":"Max rate limit reached"}
мне нужен этот результат, например:
0 1 {"status":"0","message":"NOTOK","result":"Error! Invalid address format"} 2 3 4 5 6 7 {"status":"0","message":"NOTOK","result":"Error! Invalid address format"} 8 9 {"status":"0","message":"NOTOK","result":"Error! Invalid address format"} {"status":"0","message":"NOTOK","result":"Max rate limit reached"} {"status":"0","message":"NOTOK","result":"Max rate limit reached"}
Комментарии:
1. Поддерживает ли ваша среда ES6?
2. Если я им воспользуюсь, будет ли это работать? и как?
Ответ №1:
Я только что создал небольшой пример фрагмента. Что вам в основном нужно сделать, так это «дождаться» выполнения каждого вызова, прежде чем переходить к следующему вызову.
Имейте в виду, что вы можете повысить производительность при многократном вызове внешнего API, поэтому вам не нужно ждать, пока каждый запрос будет выполнен один за другим.
async function checkbalance(i){ return new Promise((resolve, reject) =gt; { setTimeout(() =gt; { console.log('resolved', i) resolve(); }, 100); }) } (async() =gt; { for (let i = 0; i lt; 10; i ) { console.log(i); await checkbalance(i); } })()