Javascript Promise 回调(调用时)

Javascript Promise Callback (when it is called)

这是一个愚蠢的问题,但我很难理解函数是如何成为 class 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 class 的构造函数中的内容吗?我不明白为什么要立即调用它。

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

下面是将 fs.readFile() 的普通回调版本放入承诺包装器中的示例:

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 的 promified 版本,叫做 fs.promises.readfile,但是当你需要手动 promisify 其他还没有自己的 promise 接口的更复杂的东西时,可以使用这个结构。


有关承诺更复杂内容的真实示例,请参阅 mapConcurrent() 函数 or the rateLimitMap() function here