Как в node.js сделать задержку в цикле?
Советую изучить Promise. Перед циклом создаётся экземпляр Promise, каждая итерация подписывается методом then на следующий запрос. После цикла можно в промис добавить последний then, который продолжит выполнять задачу, когда будет получен последний запрос. Когда функция завершается, event loop начинает последовательно выполнять запросы, добавленные Промисом.
Выглядит примерно так:let promise = Promise.resolve();
for(...) {
  promise.then( () => {
    return new Promise((resolve) => {
      request.get(..., (data) => {... resolve(data);});
    }
  }
}
promise.then((lastData) => {...});
Отказаться от forEach... точнее, использовать вместо него for в генераторе. function* code(result) {
  for(var i = 0; i < result.length; i++) yield result[i];
}
function code2(gen) {
  items = gen.next().value;
  request.get("https://www.googleapis.com/youtube/v3/search?part=snippet&order=viewCount&q="+items['song']+'+'+items['song']+"&type=video&key=AIzaSyAvDAdEnqrStOJNnpnGy9BkrC_sG-gcHIU", function(err,res,body){
          if(res.statusCode == 200 ) {          	
             console.log(JSON.parse(body)['items'][0].id.videoId);	
             code2(gen);         
          }
      });
}
let gen = code(result);
code2(gen);