gpt4 book ai didi

javascript - Promise 返回 'undefined' 或 babel 编译的代码不等待返回(async/await)

转载 作者:行者123 更新时间:2023-12-01 00:56:57 25 4
gpt4 key购买 nike

有一个异步函数 (send),其中如果未定义 msg 属性,则另一个函数 (getNextProcess) 设置其值。getNextProcess 在 Promise 中执行数据库查询。查询回调Promise解析函数。

问题:

用 Babel 翻译代码后,msg 将始终为“未定义”。Promise 在后台独立运行并返回正确的值(通过控制台日志检查)。

/* ORIGINAL */

class MyClass(){

/*
construct & other codes here...
*/

getNextProcess(){
new Promise(res => {
logDb.get("SELECT * FROM process WHERE details NOT LIKE '%isComplete:true%' ORDER BY id LIMIT 1", (e, r) => {
let result = JSON.parse(r.details);
result.id = r.id;
res(result);
});
});
}

async send(msg = undefined){
if (!msg) msg = await this.getNextProcess();
webView.send('webview:receive', msg);
}

}
/* Transformed */
{
key: "send",
value: function () {
var _send = (0, _asyncToGenerator2["default"])(
/*#__PURE__*/
_regenerator["default"].mark(function _callee() {
var msg,
_args = arguments;
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
msg = _args.length > 0 && _args[0] !== undefined ? _args[0] : undefined;

if (msg) {
_context.next = 5;
break;
}

_context.next = 4;
return this.getNextProcess();

case 4:
msg = _context.sent;

case 5:
this.webView.send('webview:receive', msg);

case 6:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));

function send() {
return _send.apply(this, arguments);
}

return send;
}()
}
/* package.json */
// ...
"scripts": {
"start": "npm run compile && electron main.js",
"compile": "browserify -t [ babelify --presets [ @babel/preset-env ] ] src/app.js -o js/app.js",
},
"devDependencies": {
"@babel/core": "^7.4.5",
"@babel/plugin-transform-async-to-generator": "^7.4.4",
"@babel/plugin-transform-regenerator": "^7.4.5",
"@babel/plugin-transform-runtime": "^7.4.4",
"@babel/preset-env": "^7.4.5",
"@babel/runtime": "^7.4.5",
"babel-core": "^7.0.0-bridge.0",
"babelify": "^10.0.0",
"browserify": "^13.0.1",
"electron": "^4.1.4",
"electron-rebuild": "^1.8.5"
},
// ...

/* .babelrc */

{
"presets": [
[
"@babel/preset-env",
{
"useBuiltIns": "entry"
}
]
],
"ignore": [
"../node_modules/jquery/dist/jquery.js"
],
"plugins": [
["@babel/plugin-transform-runtime", {
"helpers": true,
"regenerator": true
}],
"@babel/plugin-transform-async-to-generator",
"@babel/plugin-transform-regenerator",
]
}

最佳答案

看来您忘记了在 getNextProcess 中返回 promise 。如果你不给它一个 promise ,await就不知道要等待什么。

getNextProcess(){
return new Promise(res => {
//...
});
}

关于javascript - Promise 返回 'undefined' 或 babel 编译的代码不等待返回(async/await),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56495714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com