Olá Felipe, tudo bem?
Você poderia explicar um pouco melhor o que você pretende fazer? Se pedirmos um console.log no último  then não iremos conseguir processar o retorno pois teremos undefined ( retorno do console.log) 
No caso para tratar fora do html teríamos algo da seguinte maneira:
function ListaLivrosJavaScript (){
    return fetch ("https://www.googleapis.com/books/v1/volumes?q=javascript")
    .then (data => data.json())
    .then (data => data.items.map (item => item))
    .then (data => data.map (item => item.volumeInfo))
    .then (data => data.map(item => item.title))
    };
E no mesmo arquivo, ou em outro, teríamos o seguinte trecho:
listaLivrosJavacript().then( retorno => console.log(retorno))
E aqui sim ao invés do console.log podemos tratar os dados corretamente :)
Utilizando o async & await podemos encapsular esse útlimo código, por exemplo:
async function main() {
    const retorno = await ListaLivrosJavascript();
    console.log(retorno);
}
Então quando queremos usar fora do html temos essas duas abordagens, pois o retorno da nossa função continua sendo uma promise ::)
Agora caso não foi isso que você quis dizer, poderia dar um outro exemplo ? 
Abraços e Bons Estudos!