首页 > 解决方案 > Javascript:异步函数返回 Promise 对象而不是字符串

问题描述

在此函数中的所有代码执行完毕后,我只是想返回一个字符串。

目前,一个 Promise 对象被添加到数组中,而不是我期望的字符串。

我究竟做错了什么 ?

main.js

try {
  await filePaths.push(createCompaniesParquet(companiesDataset));
  await filePaths.push(createFacilitiesParquet(facilitiesDataset));
}catch(err){
  console.log(err)
}
console.log(filePaths)

var createCompaniesParquet = async(facilities)=>{
    var writerFacilitySchema = new parquet.ParquetSchema(facilitySchema);
    var writerFacility = await parquet.ParquetWriter.openFile(writerFacilitySchema, '/tmp/facilities.parquet');
    try{
        for (let index = 0; index < facilities.length; index++) {
            await writerFacility.appendRow({
                facility_commitment: false,
                facility_currency: 'GBP',
                facility_originator_lgd: 0.45,
                facility_originator_pd: 0.0, //TODO
                facility_security: TRUE, //TODO
                facility_id: '', //TODO
            });
        }
        await writerFacility.close();
    } catch(err){
        return err
    }
    return '/tmp/facilities.parquet'
}

var createFacilitiesParquet = async(facilities)=>{
        var writerFacilitySchema = new parquet.ParquetSchema(facilitySchema);
        var writerFacility = await parquet.ParquetWriter.openFile(writerFacilitySchema, '/tmp/facilities.parquet');
        try{
            for (let index = 0; index < facilities.length; index++) {
                await writerFacility.appendRow({
                    facility_commitment: false,
                    facility_currency: 'GBP',
                    facility_originator_lgd: 0.45,
                    facility_originator_pd: 0.0, //TODO
                    facility_security: TRUE, //TODO
                    facility_id: '', //TODO
                });
            }
            await writerFacility.close();
        } catch(err){
            return err
        }
        return '/tmp/facilities.parquet'
    }

使用上述内容,如果我控制台日志文件路径我得到这个:

[ Promise { <pending> }, Promise { <pending> } ]

我希望得到这个:

["/tmp/facilities.parquet","/tmp/facilities.parquet"]

标签: javascriptasync-await

解决方案


Promise 处于以下状态之一:

  1. 待定:初始状态,既不履行也不拒绝。
  2. 已完成:表示操作已成功完成。
  3. 拒绝:表示操作失败。

因此,如果操作成功完成,您可以使用createFacilitiesParquet(params).then(val => {//do some thing})val 的值是您在函数中返回的值。


推荐阅读