node.js connecting to s3 and youtube
I had a crack at it, I tried to replace the for loops with higher-order functions, and use ES6 let and const for variable declarations.  I feel like the efficiency of the functions could be improved, but this could be a good starting point to refactoring.  Also, fixed some formatting to make it a bit easier to read.

const AWS = require('aws-sdk');
const fs = require('fs');
const Singer = require('./Singer')
const YTAPI = require('node-youtubeapi-simplifier');

const credentials = new AWS.SharedIniFileCredentials();
const s3 = new AWS.S3({ apiVersion: '2006-03-01' }); //does s3 need to be declared as variable?

const APIKEY = 'AIzaSyDS1p3m9wnZLLCPc1hDQBX3K_UnS4j0CdY' 

const bucketParams = {
  Bucket: 'pc-backend-exercises',
  Key: 'toSearch.json',
  ResponseContentType: 'application/json'
};

AWS.config.update({ region: "us-west-1" });
AWS.config.credentials = credentials;
YTAPI.setup(APIKEY);

const singers = []; //do you need this singers array?

s3.getObject(bucketParams, (err, data) =&gt; {
    if (err) {
      console.log(err, err.stack);
      return err;
    }

    let fileContents = data.Body.toString();
    let json = JSON.parse(fileContents);
    //I try to avoid for loops if possible
    json.Search.artists.forEach((artist, idx) =&gt; singers.push(new Singer(json.Search.artists[idx])));

    console.log('the list of the singers has %d singers',json.Search.artists.length);
    search10TopForASinger();
});

const setSongsArray = (data, songs) =&gt; {
  data.slice(0, 10).forEach((song) =&gt; songs.push(song.title));
}

const search10TopForASinger = () =&gt; {
  console.log('entered search10TopForASinger ')

  let promises = singers.map((singer, idx) =&gt; YTAPI.searchFunctions.simpleSearch(singers[idx].name));

  Promise.all(promises).then((results) =&gt; {
    console.log('all the threads of the youtube api are back')
    singers.forEach((singer, idx) =&gt; setSongsArray(results[idx], singers[idx].songs) )
    printJsonAndUpload();
    console.log('we are done you can test yourself with testGiladFile.js');
  }).catch((e) =&gt; {
    console.log(e)
  });
}

const printJsonAndUpload = () =&gt; {
  console.log('entered printJson')
  const data = {
    results: []
  };

  singers.forEach((singer, idx) =&gt; {
    let singerName = singers[idx].name;
    const singerObj = {};
    singerObj[singerName] = [];
    singers[idx].songs.forEach((song) =&gt; { //could use .reduce() here
      const songObj = {};
      songObj[song+1] = singers[i].songs[song];
      singerObj[singerName].push(songObj)
    });
    data.results.push(singerObj);
  });

  console.log('uploading file to s3')
  s3.putObject({ Bucket: 'pc-backend-exercises', Key:'gilad.json', Body: JSON.stringify(data), ContentType: "application/json" },
    (err, data) =&gt; {
      //console.log('error');
      //console.log(JSON.stringify(err)+" "+JSON.stringify(data));
    });
  console.log('the name of the file is gilad.json');
}