gpt4 book ai didi

javascript - getURL 不返回 Promise 对象

转载 作者:行者123 更新时间:2023-12-03 04:25:56 26 4
gpt4 key购买 nike

getURL确实返回了一个promise对象,为什么不起作用?

const fs = require('fs');

function getURL(URL){
fs.readFile(URL,(err, buffer)=>{
if(err) return Promise.reject(err.message);
return Promise.resolve(buffer.toString());
});
// return Promise.resolve(42); works
}
getURL('1.txt').then(text=>{
console.log(text);
}).catch(err=>{
console.log(err);
});

谢谢。除了返回新的 Promise 对象之外,我可以使用静态方法 Promise.resolve 吗?

最佳答案

你不能return a value from an asynchronous callback .

相反,您需要在外部函数中创建 Promise(使用 new Promise),并在该 Promise 的执行器中运行异步代码:

function getURL(URL) {
return new Promise((resolve, reject) => {
// run asynchronous code here
// call resolve on success or reject on error

fs.readFile(URL, (err, buffer) => {
if(err)
reject(err);
else
resolve(buffer.toString());
});
}
}
<小时/>

话虽如此,最好尽可能避免自己创建 promise (正如 aaaaaa 指出的,它是 promise antipattern )。在 fs (和其他内置 Node 模块)的特定情况下,我建议您使用类似 mz 的东西。 ,它包装了所有内置模块并使它们使用 Promise 而不是回调:

const fs = require('mz/fs');
function getURL(URL) {
return fs.readFile(URL)
.then((buffer) => buffer.toString());
}

// or even better:
function getURL(URL) {
return fs.readFile(URL, 'utf8');
}

关于javascript - getURL 不返回 Promise 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43729613/

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