【问题标题】:Javascript Promise Callback (when it is called) [duplicate]Javascript Promise 回调(当它被调用时)[重复]
【发布时间】:2022-02-07 04:13:03
【问题描述】:

这是一个愚蠢的问题,但我很难理解函数如何成为 javascript 中的一等公民以及何时调用回调。

const promise = new Promise((resolve,reject) => {
    const error = false
    if(!error) {
        resolve("Promise resolved")
    } else {
        reject("Promise is rejected")
    }

})
console.log(promise) //Promise { 'Promise resolved' }

对于上面的代码,为什么在我创建 Promise 时会调用 Promise (resolve, reject) => {} 内的回调?这是 Promise 类的构造函数中的东西吗?我不明白为什么会立即调用它。

【问题讨论】:

    标签: javascript function promise callback


    【解决方案1】:

    promise 执行器函数由 promise 构造函数立即调用。这就是它的工作原理。该执行器函数的通常点是启动您的异步操作,然后当该异步操作完成后,您调用resolve()reject()

    以下是将fs.readFile() 的普通回调版本放入promise 包装器的示例:

    function readFilePromise(filename, options) {
        return new Promise((resolve, reject) => {
            fs.readFile(filename, options, (err, data) => {
                if (err) {
                    reject(err);
                } else {
                    resolve(data);
                }
            })
        });
    }
    

    用法:

     readFilePromise("myfile.txt").then(data => {
         console.log(data);
     }).catch(err => {
         console.log(err);
     });
    

    注意:这只是此处的说明示例。 Nodejs 现在已经有了fs.readFile 的promisified 版本,称为fs.promises.readfile,但是当您需要手动promisify 其他还没有自己的promise 接口的更复杂的事情时,可以使用这种结构。


    有关承诺更复杂事物的真实世界示例,请参见 mapConcurrent() 函数 hererateLimitMap() 函数 here

    【讨论】:

    • 感谢您的回答。所以存在一个构造函数,在 Promise 中类似于 constructor(executor) {executor()} correct?
    • @mendokusai - 是的,这将是构造函数实现的一部分。它比这更复杂一些,但这是一般的想法。
    • 感谢您详细回答我的简单问题
    猜你喜欢
    • 2021-05-28
    • 1970-01-01
    • 2018-05-17
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    • 2016-07-29
    • 1970-01-01
    • 2015-06-14
    相关资源
    最近更新 更多