在es6中返回未定义的异步函数

时间:2019-12-15 21:47:10

标签: javascript ecmascript-6 try-catch

此处,import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.model_selection import StratifiedShuffleSplit from sklearn.preprocessing import OrdinalEncoder df = pd.read_csv("mushrooms.csv",index_col=False,header=None) def n(target): if target == 'p': return 1 elif target == 'e': return 0 df[0] = df[0].apply(n) #manually encoding the targets targets = df[0] inputs = df[df.columns[1:]] def test_train_split(mydf, inputs, tratio, target): splitter = StratifiedShuffleSplit(n_splits = 1, test_size = tratio, random_state = 42) train_index, test_index = next(splitter.split(inputs, target)) strat_train = mydf.iloc[train_index] strat_test = mydf.iloc[test_index] return strat_train, strat_test def print_test_train_dfs(train_df, test_df, target_column = 'None'): print("\nTraining data:") train_df.info() if target_column != 'None': print(train_df[target_column].value_counts()) print('\nTest data:') test_df.info() if target_column != 'None': print(test_df[target_column].value_counts()) traindf, testdf = test_train_split(df, inputs, 0.2, targets) enc = OrdinalEncoder() enc.fit(traindf) df = enc.transform(testdf) for i in range(len(df)): for j in range(len(df[1])): df[i][j].round(0) df = pd.DataFrame.from_records(df) print(df) 函数中的plcs变量需要在外部使用。我正在尝试直接调用try catch函数并将其存储在async函数中,但这两种方法都不起作用,第一种方法显示未定义,而下一个方法返回空Promise

sync

1 个答案:

答案 0 :(得分:0)

所有async函数都返回一个承诺。因此,在调用await函数时必须使用.then()async才能获得解析值。

async函数在函数内部非常有用,因此您可以在函数内部使用await,但对于外部调用者,仍然只是返回了一个承诺。 async的功能是不将异步结果转换为同步结果。 async函数的调用方仍然必须处理异步响应(按承诺)。

例如:

async function fn() {
    const dbResult = await ftchplc();
    return dbResult.rows._array;
 };

fn().then(sample => {
    console.log(sample);
}).catch(err => {
    console.log(err);
});

这假设ftchplc()返回的诺言可解决您的预期dbResult