AngularJS错误: regeneratorRuntime is not defined with async function

标签 angularjs asynchronous

我正在使用 angularjs,我想执行一些与读取文件数据相关的代码,我想完全执行这个函数,然后开始执行另一个代码块。

科学我在我的 Controller 中使用了“async”关键字我得到了这个错误

regeneratorRuntime is not defined

这是我的异步函数定义:

 async function fillFilesData() {
            if (uploader.queue.length) {
                uploader.queue.forEach(function (item) {
                    var reader = new FileReader();
                    reader.onloadend = function (e) {
                        console.log("about to encode");
                        var encoded_file = btoa(e.target.result.toString());
                        $scope.newAnnouncement.files.push({ fileName: item.file.name, encodedDatta: encoded_file });
                    };
                    reader.readAsBinaryString(item._file);

                });


            }

}

函数调用:

$scope.add = function () {
            fillFilesData().then(function () {
//rest of my code here here
}
)};

最佳答案

如果 babelrc 中的目标浏览器/节点版本不支持异步和等待,并且您没有babel-plugin-transform-runtime,则它们将被转换为生成器函数或类似的函数。插件已安装。有多种方法可以解决此问题,即安装 preset-env ,或babel-plugin-transform-runtime并将它们包含在你的 babelrc 中 -- See here .

这段代码还有另一个问题。 async 函数不返回可以解析的 Promise。链接到 async 函数的任何后续函数都将立即执行,从而导致 async/await 无用。也许这是 100% 的示例代码,但我认为值得一提。

async function fillFilesData() {
            let deferred = $q.defer();
            if (uploader.queue.length) {
                uploader.queue.forEach(function (item) {
                    var reader = new FileReader();
                    reader.onloadend = function (e) {
                        console.log("about to encode");
                        var encoded_file = btoa(e.target.result.toString());
                        $scope.newAnnouncement.files.push({ fileName: item.file.name, encodedDatta: encoded_file });
                    };
                    reader.readAsBinaryString(item._file);

                });

             deferred.resolve(/*something*/);
            }else{
                deferred.resolve(/*whatever*/);
            }
            return deferred.promise;

}
$scope.add = function () {
            let res = await fillFilesData();
    yourFunctionToWait(res);
}
)};

关于AngularJS错误: regeneratorRuntime is not defined with async function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54275383/

相关文章:

c# - 在异步 HttpWebResponse 读取期间捕获未处理的 SocketException

javascript - React - 具有意外返回顺序的异步调用

javascript - 将对象插入数组会删除而不是添加

angularjs - Angular Service矩形缓存

javascript - Angular 项目使用 Tomcat 还是 express

c - 使用epoll主循环延迟执行

c# - 使用 Task<bool> 返回类型对异步方法进行单元测试

angularjs 向 ng-keydown 添加逻辑

angularjs - Angular 2 - 将模块移动到他们自己的项目

java - 如何使用 k() 函数在 kdb/q 中接收数据