在 babel 6 和 webpack 中使用 async/await 的正确方法
correct way to use async/await with babel 6 and webpack
我只是想探索一下 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());
}
.....
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()
我只是想探索一下 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());
}
.....
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()