Jin*_*Niu 4 javascript async-await
我正在学习Javascript。这听起来像是个疯狂的主意,但我在Google上找不到明确的答案。我可以async function随处替换我所有的常规函数/方法吗?我的意思是,这似乎没有任何缺点,它使事情变得如此简单。在情况仅涉及同步步骤的情况下,您只是不使用await它,它将像正常功能一样工作。简单!
我个人觉得必须区分async功能和正常功能是不必要的负担。这就像驾驶手动变速箱汽车一样,在这种情况下,汽车本身可以轻松地自行处理传动装置。
我在这里想念什么吗?
async函数总是返回Promises。这意味着,无论何时不处理异步事务,都必须Promise先将返回值转换为值,然后才能使用它。例如:
const return4 = async () => 4;
console.log(4 + return4());Run Code Online (Sandbox Code Playgroud)
取而代之的是,您将不得不使用(不必要的冗长):
const return4 = async () => 4;
(async () => {
console.log(4 + await return4());
})();Run Code Online (Sandbox Code Playgroud)
(或致电.then在return4使用它之前调用)
另一方面,如果return4不是这样的话async,当然console.log(4 + return4());仅靠它就可以了。
async函数的另一个问题是将它们转换为ES5代码(允许与IE等过时的浏览器兼容)require regenerator-runtime,这是非常重的。例如,使用Babel转译以下单行:
const foo = async () => console.log('async!');
Run Code Online (Sandbox Code Playgroud)
将其插入repl时,您将获得:
"use strict";
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
try {
var info = gen[key](arg);
var value = info.value;
} catch (error) {
reject(error);
return;
}
if (info.done) {
resolve(value);
} else {
Promise.resolve(value).then(_next, _throw);
}
}
function _asyncToGenerator(fn) {
return function() {
var self = this,
args = arguments;
return new Promise(function(resolve, reject) {
var gen = fn.apply(self, args);
function _next(value) {
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
}
function _throw(err) {
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
}
_next(undefined);
});
};
}
var foo =
/*#__PURE__*/
(function() {
var _ref = _asyncToGenerator(
/*#__PURE__*/
regeneratorRuntime.mark(function _callee() {
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch ((_context.prev = _context.next)) {
case 0:
return _context.abrupt("return", console.log("async!"));
case 1:
case "end":
return _context.stop();
}
}
}, _callee);
})
);
return function foo() {
return _ref.apply(this, arguments);
};
})();
Run Code Online (Sandbox Code Playgroud)
这还取决于regeneratorRuntime脚本中是否已包含该脚本,您可以在此处看到700余行的代码。
在功能较弱的系统上,这可能会导致不小的影响。这就是为什么有些人(例如使用AirBNB样式指南的人)更喜欢从不使用async函数的方法,即使它们使脚本的异步控制流程更加清晰。
| 归档时间: |
|
| 查看次数: |
144 次 |
| 最近记录: |