gpt4 book ai didi

javascript - 如何将此回调参数转换为 promise ?

转载 作者:行者123 更新时间:2023-12-01 03:59:37 24 4
gpt4 key购买 nike

我正在使用socket.io,我想将回调函数转换为一个简单的基于 promise 的函数,我可以在其中返回一个值。

我正在尝试转换此处找到的确认:socket.io/docs/#sending-and-getting-data-(acknowledgements)

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));
});
});
};

最佳答案

您的第二个代码片段与第一个代码片段不同。在第一个中,有一种机制可以在 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 并不是适合该工作的工具,您要么需要使用回调,要么需要使用可观察量之类的东西。

关于javascript - 如何将此回调参数转换为 promise ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42301208/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com