gpt4 book ai didi

javascript - Promise.resolve 返回未定义

转载 作者:行者123 更新时间:2023-11-28 14:35:18 25 4
gpt4 key购买 nike

这是 Multiple Promises - Where to resolve? 的延续我对不同的功能使用相同的代码。

但是,这次 Promise.resolve 返回未定义。

结果感谢很多人指出错误。我意识到代码中有多个错误。

1) 在非 bool 运算中使用 &&。

应该使用

(console.log(results) , Promise.resolve(results)

而不是

console.log(results) && Promise.resolve(results)

2) 使用不需要的 Promise.resolve - 仅从 Async 函数返回结果将产生与使用 Promise.resolve 相同的结果。

我的最终代码。

getMessages: function (roomId) {

return keysAsync('room:'+roomId)
.then(room =>
room === '' ? Promise.reject('Invalid room Id')
: smembersAsync('room:messages:'+roomId))
.then(messagesId => { return messagesId })
.catch(err => { return err }))

}

原始问题我正在使用 nodejs promisify,因此我将以下内容声明为 Redis 的 promise

const { promisify } = require('util');
const getAsync = promisify(client.get).bind(client);
const hmsetAsync = promisify(client.hmset).bind(client);
const hsetAsync = promisify(client.hset).bind(client);
const incrAsync = promisify(client.incr).bind(client);
const smembersAsync = promisify(client.smembers).bind(client);
const keysAsync = promisify(client.keys).bind(client);
const sismemberAsync = promisify(client.sismember).bind(client);

getMessages: function (roomId) {

return keysAsync('room:'+roomId)
.then(room =>
room === '' ? Promise.reject('Invalid room Id')
: smembersAsync('room:messages:'+roomId))
.then(messagesId => console.log(messagesId) && Promise.resolve(messagesId))
.catch(err => Promise.reject(err))

},

然后我按如下方式调用该函数

tools.getMessages('4').then((results) => {
console.log('Messages in Room 4 => ', results);
}).catch(err => console.log(err))

在我的控制台中,我可以看到以下结果

[ '191', '192', '193', '194', '195', '196', '197',
'198', '199', '200', '201', '202', '207', '208', '209', '210', '211', '212', '213', '214', '215', '216', '217', '218' ] //this is when i console log messagesId

Messages in Room 4 => undefined //This is when i console log results

最佳答案

console.log() 返回 undefined,这是错误的。 && 是一个短路运算符,仅当第一个表达式为真时才计算第二个表达式。所以它永远不会执行 Promise.resolve(messagesId)

使用逗号运算符,而不是&&。它计算两个表达式并返回第二个表达式。

    .then(messagesId => (console.log(messagesId), Promise.resolve(messagesId)))

关于javascript - Promise.resolve 返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49957878/

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