- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我的代码是这样的:
public getUrl(url) {
//returns URL
... }
public getResponseFromURL(): container {
let myStatus = 4;
const abc = http.get(url, (respon) =>
const { statusCode } = respon;
myStatus = statusCode;
console.log('Inside callback' +myStatus);
.on('error', (err) => {
console.log('Things have gone wrong' + err);
});
console.log('ITS COMPLICATED' +myStatus);
return new Container(status, body, header);
}
}
我面临的问题是因为 JS 的异步性质和 console.log('ITS COMPLICATED') 在回调函数中的那个之前执行。我正在尝试让第一个在最后一个 console.log 之前执行!
我正在使用 Async/Await,如下所示:
public timeoutPromise(time: any) {
return new Promise((resolve) => {
setTimeout(() => {
resolve(Date.now());
}, time);
});
}
public doSomethingAsync() {
return this.timeoutPromise(1000);
}
因此将我的 getResponseFromURL() 更改为:
public async getResponseFromURL(): Promise<container> {
this.myStatus = 7;
console.log(0);
await this.doSomethingAsync();
console.log(1);
const abc = http.get(url, (respon) => {
const { statusCode } = respon;
this.myStatus = statusCode;
console.log('Inside Callback ' + statusCode);
}).on('error', (err) => {
console.log('Things have gone wrong ' + err);
});
await this.doSomethingAsync();
console.log(2);
await this.doSomethingAsync();
console.log('Is it simple lalala ' + this.myStatus);
await this.doSomethingAsync();
}
}
这样做的问题是,当我在 expect.getResponseFromURL().getStatus() 之前测试此异步函数时,如果我的容器类(getResponseFromURL() 的返回类型)是状态和正文的容器。 toBe(200)
会起作用。
测试如下:
test('Async function', async () => {
expect.assertions(1);
const data = await ContainerGlobals.getResponseFromURL().getStatus();
expect(data).toBe(207);
});
现在我从 .getStatus()
收到错误,我不确定如何绕过这个错误?
"does not exist on Promise"
最佳答案
在上面的代码中await
在调用 getStatus
的结果上被调用关于调用 ContainerGlobals.getResponseFromURL()
的结果.
ContainerGlobals.getResponseFromURL()
返回 Promise
并立即调用 getStatus()
在 Promise
上自 getStatus
以来给出错误“在 Promise
上不存在”。
await
需要在 Promise
上调用由 ContainerGlobals.getResponseFromURL()
返回, 和 getStatus
应该在 await
返回的结果上调用.
解决此问题的最快方法是在 await
两边加上括号:
test('Async function', async () => {
expect.assertions(1);
const data = (await ContainerGlobals.getResponseFromURL()).getStatus();
expect(data).toBe(207); // SUCCESS
});
...但您可能想要拆分 await
为了便于阅读,将一行分成两行:
test('Async function', async () => {
expect.assertions(1);
const result = await ContainerGlobals.getResponseFromURL(); // let the Promise resolve
const data = result.getStatus(); // call getStatus on the result
expect(data).toBe(207); // SUCCESS
});
关于typescript - 在 JS 中测试异步函数 - 错误 : "Did you forget to use await",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54043275/
我写了我认为会很简单的代码,但它的行为不正常。 我的预期输出是: I'm fine with printing it here 3 Can be printed as much as I want 3
我将 Ruby 与 SQLite3 结合使用,不幸的是,我尝试在 Sqlite3 中使用外键没有成功。根据 sqlite3 --version,安装了 3.7.13 版本。据我所知,Sqlite3 从
使用 Perl6 的 Date 时处理格式化程序对象是否有错误?如果我在实例化对象后操作日期,则格式化程序似乎返回到默认值。 my $d = Date.new(2019, 12, 25, format
我的软件在 HKCU\Software\mysoftware 中存储了一些值,这从来都不是问题。但是,我现在还在 HKCU\Software\mysoftware\Licenses 中存储了一些值 -
我有一个看起来像这样的小终点 val numbers = it.bodyAsString.parseJsonList() processedNumbers = numberService.proces
我有一个方法 public static void startAnimation() { new AnimationThread().run(); } 其中AnimationThread实现了
下面的代码片段来 self 的程序,该程序获取单词,然后打印它们以及出现的次数。 它工作得几乎很好,除了它“忘记”之前已经保存过的特定条目并且不增加与其关联的计数器。 typedef struct {
在 c# 中,当您在异步方法中调用 await 方法时,代码将从调用上下文执行到该方法。如果我想进行一个异步调用,它将直接从同一行代码继续(即使异步操作尚未完成)而不是返回调用上下文怎么办?我该怎么做
很抱歉以愚蠢的方式提问,但我不知道如何从技术上表达。 我的项目是打字训练。如果用户写的字母(userWord[i],使用 getch() 从键盘获得)与我给他的单词中对应的字母(filas[maxIn
我有一个创建并返回 Pane 的函数,该 Pane 存储在其他地方。当用户按下按钮时会显示此信息。 public Pane createBoard(Board d){ TilePane
我目前正在研究结构类型。我怀疑两种类型仅仅因为它们碰巧有一部分结构相同就被认为是等价的。这感觉很像静态鸭子类型,它完全忽略了类型的语义级别。于是仔细查看了flow对普通对象的结构类型,遇到了如下行为:
那么,假设我有一个 users table 和一个 pages table 。假设我想允许用户隐藏/忘记/忽略某些页面。在这一点上,我可以想到两种可能的方法: 与null 的外部连接匹配: 我可以创建
我在一个实体上有一个 NSOrderedSet 关系。在我保存、退出并重新启动应用程序之前,对象的顺序是正确的。然后,当获取实体时,对于实体的某些实例,此关系的顺序与重新启动之前的顺序不同。就好像 N
我使用 SFSafariViewController 开发了一个移动应用程序来展示一个网站,其中访问过的链接使用 CSS :visited 伪类 ( https://developer.mozilla
我需要着火并忘记调用某些异步方法。我意识到 VS 建议我可以将调用设置为 _discard 并且 IDE 警告消失。但我不确定与丢弃一起使用时是否仍未等待该调用。会是吗? public async
我正在使用 Task.Run(() => this.someMethod()) 来安排后台作业。我对操作结果不感兴趣,需要继续申请流程。 但是,有时我的后台任务很长时间都没有安排。自从我们从 .Net
我有以下代码,编译器无法看到作为参数传递给函数的变量是 constexpr,这让我很恼火,因此我必须使用 arity 0 函数而不是 1 参数函数。 我知道这不是编译器错误,但我想知道是否有可以解决此
这个问题在这里已经有了答案: Strange result when removing item from a list while iterating over it (8 个回答) 关闭7年前。
我有这个代码: #!/bin/bash pids=() for i in $(seq 1 999); do sleep 1 & pids+=( "$!" ) done for pid in "
我有一个 Python Kafka 消费者应用程序,我在其中消费消息,然后同步调用外部网络服务。 Web 服务需要一分钟时间来处理消息并发送响应。 有没有办法在不等待响应的情况下使用消息、向 Web
我是一名优秀的程序员,十分优秀!