[英]How do I convert this callback argument into a promise?
我正在使用socket.io,我想將回調函數轉換為基於簡單的Promise函數,可以在其中返回值。
我正在嘗試轉換在此處找到的確認:socket.io/docs/#sending-and-getting-data-(確認)
socket.on('getGames', (data, callback) => {
Game.find(data)
.then(data => callback(data)); //explicit call to callback
});
我想調用一個函數,例如:
socketEvent(socket, 'getGames')
.then((data) => {
return Game.find(data); //returns a promise and can be chained
});
我在想類似的東西:
//this doesn't work
const socketEvent = (socket, name) => {
return new Promise(function (resolve, reject) {
socket.on(name, (data, callback) => {
resolve((data) => callback(data));
});
});
};
只需resolve(data)
。 不需要內部功能。 那將流入承諾鏈。
另外,在出現問題時也不要忘了打電話給reject
。
您的第二個代碼段與第一個不同。 在第一個中,當Game.find()
檢索到其值時,有一種發送確認的機制,但是在第二個中,它沒有辦法在完成時將確認發送回去。
我認為這可能與您要執行的操作很接近:
const socketEvent = (socket, name) => {
return new Promise(function (resolve, reject) {
socket.on(name, (data, sendBack) => resolve({ data, sendBack }));
});
};
然后,您可以像這樣消耗它:
socketEvent(socket, 'getGames')
.then({ data, sendBack } => Game.find(data).then(sendBack))
.then(... more stuff);
但是,正如其他人指出的那樣,此代碼與原始代碼之間仍然存在較大差異,因為promise版本只會捕獲一次事件(這就是promise工作的方式)。 如果您需要建立一種機制來捕獲同一事件多次,則Promise不是適合該工作的工具,您需要使用回調或類似Observables的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.