簡體   English   中英

如何將此回調參數轉換為Promise?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM