在Microsoft Bot Builder中运行异步功能(使用Node.JS)

时间:2018-02-04 20:15:42

标签: javascript node.js botframework

我正在尝试创建一个测试机器人,通过聊天来响应从JSON对象通过另一个API获取的(无意义的)字符串

代码:

<tr *ngFor...>
    ...
    <mat-form-field>
      <input matInput [matDatepicker]="pick" placeholder="date" formControlName="date">
      <mat-datepicker-toggle matSuffix [for]="pick"></mat-datepicker-toggle>
      <mat-datepicker #pick></mat-datepicker>
    </mat-form-field>

问题是bot var不是异步函数,所以我不能等待它。如果我删除await,则bot会回复Object Promise。我总体上对JS缺乏经验,所以我可以得到任何指示吗?

e:请求部分工作得很好,我已经在不同的js程序中单独测试了

2 个答案:

答案 0 :(得分:2)

你试过这个吗?如果您使用的是与ES6兼容的节点环境,那么这应该可以正常工作

var bot = new builder.UniversalBot(connector, async function (session) {
    // Use JSON.stringify() if MyRequest Promise will resolve a object
    var text = await MyRequest()
    session.send("%s", text);
});

答案 1 :(得分:1)

如果async/await不可能,那么退回承诺怎么样?如下所示:

function MyRequest() {
    var options = {
        uri: "https://jsonplaceholder.typicode.com/posts/1",
        method: "GET",
        json: true
    }
    return request(options);
}

并使用Promise.then对结果采取行动,如下所示:

var bot = new builder.UniversalBot(connector, function (session) {
    MyRequest().then(function(text) {
        session.send("%s", text);
    }).catch(function(error) {
        session.send("%s", error);
    });
});