访问aync函数返回的最佳方法

时间:2018-08-14 06:17:40

标签: javascript reactjs asynchronous

我在React应用程序中有以下代码。由于这是异步任务,因此无法访问单独文件中的返回值。从此函数捕获返回值的最佳方法是什么?是否将代码与promise对象包装在一起?

import jsYaml from 'js-yaml';
import SwaggerValidator from 'swagger-parser';

export function parseYaml(yamlString) {
    let parsedYamlJson;
    try {
        parsedYamlJson = jsYaml.safeLoad(yamlString);
        SwaggerValidator.validate(parsedYamlJson)
        .then((parsedJson)=>{
            return { 
                isError: false,
                message: '',
                swaggerJson: parsedJson
            }
        })
        .catch((parseException)=>{
            return { 
                isError: true,
                message: 'Invalid Swagger JSON',
                swaggerJson: {}
            }
        })
    } catch (yamlException) {
        return { 
            isError: true,
            message: yamlException.message,
            swaggerJson: {}
        }
    }
}

1 个答案:

答案 0 :(得分:3)

您可以使用Promise

export function parseYaml(yamlString) {
    return new Promise((resolve, reject) => {
    let parsedYamlJson;
    try {
        parsedYamlJson = jsYaml.safeLoad(yamlString);
        SwaggerValidator.validate(parsedYamlJson)
        .then((parsedJson)=>{
            resolve({ 
                isError: false,
                message: '',
                swaggerJson: parsedJson
            })
        })
        .catch((parseException)=>{
            reject({ 
                isError: true,
                message: 'Invalid Swagger JSON',
                swaggerJson: {}
            })
        })
    } catch (yamlException) {
        reject({ 
            isError: true,
            message: yamlException.message,
            swaggerJson: {}
        })
    }
    })
}

然后在其他文件中:

parseYaml('someString').then(res => {
    console.log(res)
}).catch(err => {
    console.log('error:', err)
})