Promise. Как передать аргумент — data — в последующий .then()?
Promise передает 2 параметра.new Promise(function(resolve, reject) { ... });
так что когда придет время возвращаете через вызов resolve(value)
Описание тут
ваш промис исполняется вникудаconst myPromise = () => {
    return new Promise((resolve, reject)=>{
        let key = setTimeout(reject, 30000, 'Promise timeout');
        // Какие-то действия асинхронные для получения результата промиса
        removeTimeout(key);
        resolve(data); // <-- вот здесь мы отправляем data в then
    });
};
Используем:myPromise()
    .then(response=>{
        console.log('data: ', response);// вот сюда прилетела наша data .... 
    })
    .catch(console.error);