2017-05-19 63 views
0

我正在發出一個API請求,並希望向用戶詢問從請求返回的數據。我打電話給一個函數,它執行的請求,並返回相應的響應:AWS Lambda Node.js在異步HTTP請求完成後執行this.emit

httpRequest(params).then(function(body) { 
    console.log(body); 
    this.emit(':ask', speechOutput, repromptSpeech); 
}); 

的this.emit函數返回一個未處理的承諾廢品。如何等待請求回調被執行,然後發出:ask事件?

+0

你能爲這個文件在它的整體提供的代碼?包括代碼中的所有庫等,以便知道是否使用內置的'http'庫來發出請求,以及事件是否通過web套接字等發出。如果'this.emit'返回一個承諾,以下輸出是什麼:'this.emit(':ask',speechOutput,repromptSpeech).catch(console.log)'? –

回答

2

承諾處理器內部的this是不一樣的this之外的,所以我覺得未處理的承諾,拒絕可能會說,this.emit不是一個功能。

一個快速的解決方案是使用arrow function,這可能是爲什麼在你自己的答案代碼工作過:

// `this` here... 
httpRequest(params).then(body => { 
    console.log(body); 
    this.emit(':ask', speechOutput, repromptSpeech); // ...is the same as `this` here 
}).catch(error => { 
    console.error('uh-oh!', error); 
}); 
+0

太棒了,謝謝! –

0

我最終解決這個使用請求庫:

function getEntries() { 
    return request.get('https://wezift.com/parent-portal/api/entries.json'); 
} 

getEntries().then(
    (response) => { 
    console.log(response); 
    this.emit(':ask', 'hi', 'hi again'); 
    }, 
    (error) => { 
     console.error('uh-oh! ' + error); 
    } 
);