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。
这是一个愚蠢的问题,但我很难理解函数是如何成为 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()
函数 rateLimitMap()
function here。