2

async/await を調査しようとしています。関数を呼び出すと、コンソールに次のように表示されます。

Promise { <state>: "pending" }

これが私のwebpack.conf.jsです:

var path = require("path");
var webpack = require('webpack');
var BundleTracker = require('webpack-bundle-tracker');

module.exports = {
    devtool: 'eval',
    entry: [
         'babel-regenerator-runtime',
        './static/apps/app.jsx'
    ],
    output : {
        path: __dirname,
        filename: "./static/js/bundles/[name]-[hash].js"
    },
    module: {
        loaders: [
            {
                test: /\.jsx?$/,
                loader: 'babel-loader',
                exclude: /node_modules/,
                query: {
                    plugins: [ 'transform-decorators-legacy', 'syntax-async-functions', 'transform-async-to-generator'],
                    presets: ['react', 'es2015', 'stage-0']
                }
            }
        ]
    },
    plugins: process.env.NODE_ENV === 'production' ? [
        new webpack.optimize.DedupePlugin(),
        new webpack.optimize.OccurrenceOrderPlugin(),
        new webpack.NoErrorsPlugin(),
        new webpack.optimize.UglifyJsPlugin({
        compress: { warnings: false },
            comments: false,
            sourceMap: true,
            mangle: true,
            minimize: true
    })
    ] : [new BundleTracker({filename: './webpack-stats.json'}), new webpack.NoErrorsPlugin()]
};

そして私の機能:

export async function x() {
    return await (5 * 5);
}

および呼び出されたメソッド:

import {x} from '../utils/pgp.js';

.....
componentWillMount(){
        console.log(x());
    }
.....
4

1 に答える 1

8

return awaitあなたのコンソールログがあなたに伝えているように、の結果は約束です。解決された値にアクセスするには、呼び出しを でチェーンするthenか、await を使用して解決できる別の非同期関数内にいる必要があります。

async function x () {
  return await 5 * 5
}

// using `.then`
x().then(value => console.log(value))

// inside another async function
async function main () {
  let value = await x()
  console.log(value)
}

main()
于 2016-07-19T14:23:22.543 に答える