Javascript 返回带有承诺的对象(解析、拒绝)

Javascript 返回带有承诺的对象(解析、拒绝),javascript,jquery,Javascript,Jquery,我做出了一个承诺,希望将webkitGetAsEntry文件对象转换为常规文件对象 var getAsFile = async function(fileEntry) { try { return new Promise((resolve, reject) => fileEntry.file(resolve, reject)); } catch (err) { console.log(err); } } 但是,在对代码进行了大量更改

我做出了一个承诺,希望将webkitGetAsEntry文件对象转换为常规文件对象

var getAsFile = async function(fileEntry) {
    try {
        return new Promise((resolve, reject) => fileEntry.file(resolve, reject));
    } catch (err) {
        console.log(err);
    }
}
但是,在对代码进行了大量更改之后,我真的希望返回一个对象,在该对象中我也有一个文件路径。即

var getAsFile = async function(fileEntry) {
    try {
        return new Promise((resolve, reject) => return { 'file': fileEntry.file(resolve, reject), 'filepath': fileEntry.fullPath};);
    } catch (err) {
        console.log(err);
    }
}
当解析以下承诺时,只返回文件而不返回对象

getAsFile(entries[i]).then(function (file) {
    //Can only get the file, and not file.filepath
})

我在这里缺少关于承诺的哪些基本知识,以及如何实现返回具有文件和文件路径的对象?

您需要将该对象传递给
resolve
函数:

var getAsFile = function(fileEntry) {
    return new Promise((resolve, reject) => fileEntry.file(
        file => resolve({file, filepath: fileEntry.fullPath}),  
        reject
    ));
}
注意,没有必要将该函数声明为
async
,因为您返回了一个承诺,并且没有使用
wait


错误处理应该发生在调用此函数的位置。

仅用于记录,此处实际上不需要使用
try/catch
<代码>返回新承诺(回调)在这种意义上永远不会出错,即使回调本身出错。您可以放心地不经尝试就兑现承诺/catch@TKoL事实上,我没有提到这一点,但现在已经澄清了这方面的答案。