gpt4 book ai didi

javascript - 如何正确使用 resolve 和 reject 作为 promise

转载 作者:搜寻专家 更新时间:2023-11-01 00:28:56 26 4
gpt4 key购买 nike

我已经开始考虑使用 Promises,并开始将一个简单的函数放在一起并调用它几次。我需要对 reject 和 resolve 进行完整性检查。

  1. 这是“ promise ”功能的正确方法吗?
  2. 这是处理拒绝和解决的正确方法吗?
  3. 我有什么地方完全错了吗?

    const Redis     = require('ioredis');
    const redis = new Redis({
    port: 6379,
    host: '127.0.0.1'
    });


    function checkValues(name, section) {
    return new Promise((resolve, reject) => {
    redis.multi()
    .sismember('names', name)
    .sismember('sections', section)
    .exec()
    .then((results) => {
    if(results[0][1] === 1 && results [1][1] ===1) {
    reject('Match on both.');
    } else if(results[0][1] === 1 || results [1][1] ===1) {
    reject('Match on one.');
    } else {
    redis.multi()
    .sadd('names', name)
    .sadd('sections', section)
    .exec()
    .then((results) => {
    // Lazy assumption of success.
    resolve('Added as no matches.');
    })
    // No catch needed as this would be thrown up and caught?
    }
    })
    .catch((error) => {
    console.log(error);
    });
    });
    }


    // Call stuff.
    checkValues('barry', 'green')
    .then((result) => {
    // Added as no matches "resolve" message from 'barry', 'green'
    console.log(result);
    retutn checkValues('steve', 'blue');
    })
    .then((result) => {
    // Added as no matches "resolve" message from 'steve', 'blue'
    retutn checkValues('steve', 'blue');
    })
    .then((result) => {
    // Match on both "reject" message from 'steve', 'blue'
    console.log(result);
    })
    .catch((error) => {
    console.log(error);
    });

最佳答案

不,这是一种反模式。你已经有了一个返回 promise 的函数,所以你不需要将它包装在另一个 promise 中,你可以直接返回它。请记住,then() 返回一个解析为 then 返回值的 promise 。您还可以从 then 返回另一个 promise 。通常这看起来非常干净,但在这种情况下,您需要在 then 函数中添加一些逻辑,所以它会变得有点困惑。

function checkValues(name, section) {
// Just return this Promise
return redis.multi()
.sismember('names', name)
.sismember('sections', section)
.exec()
.then((results) => {
if(results[0][1] === 1 && results [1][1] ===1) {
// Rejections will be caught down the line
return Promise.reject('Match on both.');
} else if(results[0][1] === 1 || results [1][1] ===1) {
return Promise.reject('Match on one.');
} else {
// You can return another Promise from then()
return redis.multi()
.sadd('names', name)
.sadd('sections', section)
.exec()
}
})
// You don't need to catch here - you can catch everything at the end of the chain
}

关于javascript - 如何正确使用 resolve 和 reject 作为 promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45578706/

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