我有一個Nodejs腳本,其詳細信息如下所示:1)它向API請求以獲取城市列表,它將獲取JSON數(shù)組。使用此數(shù)組,我使用進行循環(huán)forEach。2)在每次迭代(第二循環(huán))時,我確實再次向API請求以獲取詳細信息(約100行)并將其插入mysql數(shù)據(jù)庫。我的問題是,如何在進入下一個項目(城市)之前使函數(shù)在第一個循環(huán)(要獲取城市列表的位置)內等待完成。我想使循環(huán)具有延遲順序。我的源代碼:const request = require('request');var moment = require('moment');var mysql = require('mysql');var a = moment('2019-04-01');var b = moment('2019-04-06');const sleep = (waitTimeInMs) => new Promise(resolve => setTimeout(resolve, waitTimeInMs));function timer(ms) { return new Promise(res => setTimeout(res, ms));}var connection = mysql.createConnection({ host : 'localhost', user : 'user1', password : 'password', database : 'local'});async function getURL(id_city,dates) { var url = 'https://localhost/api/format/json/schedule/city/'+id_city+'/date/'+dates; request(url, { json: true }, (err, res, body) => { if (err) { return console.log(err); } // console.log(body.status); var item1 = body.schedule.data.item1; var item2 = body.schedule.data.item2; connection.connect(); connection.query('INSERT INTO schedule (city,item1,item2) values ("'+id_city+'","'+task1+'", "'+task2+'")', function (error, results, fields) { if (error) throw error; }); // connection.end(); });}async function getDate(id_city){ var end; for (var m = moment(a); m.isBefore(b); m.add(1, 'days')) { getURL(id_city,m.format('YYYY-MM-DD')); await timer(1000); //making delay }}async function main () { var url = 'https://localhost/api/format/json/list_city'; connection.connect(); request(url, { json: true }, (err, res, body) => { if (err) { return console.log(err); } var list_city = body.city; //this is an array var counter = 0; list_city.forEach(function(city){ getDate(city.id, function(){ });//i need this to complete before go to next city }); });//end request url}main();
forEach循環(huán)中的NodeJs功能需要先完成,然后再轉到下一項
動漫人物
2021-04-09 14:11:11