解析错误:关键字“yield”被保留

问题描述 投票:0回答:1

我正在使用 typescript 和 gulp。

我正在使用下面的任务来编译我的打字稿

gulp.task('compile', function () {
    return gulp.src('src/**/**/*.*')
        .pipe(ts({
            "target": "ES5",
            "module": "system",
            "isolatedModules": true
        }))
        .pipe(gulp.dest('functions'));
    });

打字稿代码是

async welcomeIntent() {
        this.app.intent('Default Welcome Intent',(conv,input) => {
            conv.ask('<speak>Welcome Intent<break time="1"/> </speak>');
            let  output;
            output  =   await this.entryService.getTodaysEntryOfUser(conv);
            output.then((todaysEntry) => {
                let question:Question =  this.testService.getStartQuestion(1);
                                    return;
            })
            .catch(err => {
            console.log('Error getting document', err);
            });

          });

Promise 实现了 Typescript 功能

public getTodaysEntryOfUser(conv: any): Promise<any> {
           let documentDetail;
           let  self    =   this;
           let subjectId    =   conv.request.user.userId;
           let questionID   =   conv.request.user.questionID;
           let docRef=  this.dbManager.collection('Question');
           console.log("docRef-------------->",docRef);
           return new Promise<any>((resolve, reject) => {
             docRef.get().then(doc => {
                documentDetail  =   doc;
                conv.user.response= doc.data();
                console.log('Document data------>', doc.data());
                return resolve(doc.data());
                })
                .catch(err => {
                console.log('Error getting document', err);
                reject(err);
                });

            });
        }

从typescript编译为JS后,JS方法的代码为

IntentService.prototype.welcome= function () {
                    return __awaiter(this, void 0, void 0, function () {
                        var _this = this;
                        return __generator(this, function (_a) {
                            this.app.intent('test', function (conv, input) {
                                conv.ask('<speak>Welcome Intent<break time="1"/> </speak>');
                                var output;
                                output = yield _this.testEntryService.getTodaysEntryOfUser(conv);
                                output.then(function (todaysEntry) {

                                    var question = _this.testService.getStartQuestion(1);

                                    return;
                                })["catch"](function (err) {
                                    console.log('Error getting document', err);
                                });
                            });
                            return [2 /*return*/];
                        });
                    });
                };

生成Promise实现功能的JS代码

entryService.prototype.getTodaysEntryOfUser = function (conv) {
                    var documentDetail;
                    var self = this;
                    var subjectId = conv.request.user.userId;
                    var questionID = conv.request.user.questionID;
                    var docRef = this.dbManager.collection('Question');
                    console.log("docRef-------------->", docRef);
                    return new Promise(function (resolve, reject) {
                        docRef.get().then(function (doc) {
                            documentDetail = doc;
                            conv.user.response = doc.data();
                            console.log('Document data------>', doc.data());
                            return resolve(doc.data());
                        })
                            .catch(function (err) {
                            console.log('Error getting document', err);
                            reject(err);
                        });
                    });
                };

我得到的错误是

error  Parsing error: The keyword 'yield' is reserved

这里的问题是关键字“Yield”没有被注释。如果我使用“firebase部署——仅功能”进行部署,我会收到错误。 Yield 关键字行应如下所示,即,如果我注释 Yield 关键字,则不会收到错误。

output = /*yield */ _this.entryService.getTodaysEntryOfUser(conv);

如何使用 gulp 来做到这一点?

我提到了链接“https://basarat.gitbooks.io/typescript/docs/async-await.html

这里他们指定,如果我们使用“ES5”生成,生成代码将带有“Yield”注释

javascript node.js typescript firebase gulp
1个回答
0
投票

我在使用 Typescript 进行 React pwa 时遇到错误

Module parse failed: The keyword 'yield' is reserved
。 所以,这只是我的不匹配 - 我忘记将
async
添加到我用
await
调用方法的非常大的函数中。

也许这会节省某人的时间)

© www.soinside.com 2019 - 2024. All rights reserved.