我试图做的事情在节点js中可能是不可能的,但在我放弃之前,我想得到其他意见。
我有一个线程正在执行产品的设置。为了便于论证,让我们将其称为“主”线程。我希望在产品设置过程中可能发生的所有错误都被“主”线程捕获。如果安装成功,那么在我知道安装成功之前,我不希望“主”线程完成。
产品设置过程中的一个步骤涉及在客户的AWS帐户中创建CloudFormation堆栈。实现这一点的AWS函数是createStack。此函数仅启动创建堆栈的过程。如果使用await调用此函数,那么在获得返回值后,创建堆栈的过程仍将运行。
还有一个AWS CloudFormation函数叫做DescribeBacks,我可以用它来了解创建过程。我不能重复调用这个方法(在调用之间不使用较大的间隔),因为AWS限制了我调用方法的频率。
我希望能够每分钟调用此函数一次,以检查堆栈创建的进度,直到我可以确定安装是否成功。但至关重要的是,我还希望“主”线程等到这一成功或失败发生。
这在节点js中可能吗?我是节点js的新手。请随时告诉我,我误用了它,并且我以错误的方式思考问题。我怀疑我是。
解决方案:这是为我解决问题的代码。多亏了Tomalak
function checkStackCreationProgress(params) {
return new Promise( (resolve, reject) => {
const intervalId = setInterval( async () => {
try {
const result = await checkProgress(params);
switch(result.status) {
case 'IN_PROGRESS': break; //do nothing
case 'COMPLETE': clearInterval(intervalId); resolve(result); break;
case 'FAILED': clearInterval(intervalId); reject(result); break;
}
}
catch(error) {
clearInterval(intervalId);
reject(error);
}
},
60000);
})
.then( () => {
return;
})
.catch(error => {
throw new SetupFailedError(`Failed to create ...`, error);
});
}
在安装成功完成或失败之前,此函数不会返回
如果使用await调用此函数,那么在获得返回值后,创建堆栈的过程仍将运行。
不要用wait
调用它,这会阻塞线程。
异步函数返回promise,您可以链接它们,同时做其他事情。
因此
try {
var result = await createStack({some: params));
// work with result
} catch (ex) {
// handle error
}
做
createStack({some: params)).then(function (result) {
// work with result
}).catch(function (error) {
// handle error
});
第二种形式是非阻塞的,你可以同时做任何工作。例如:
var checking = setInterval(function () {
// check/output for the stack status...
}, 60000)
createStack({some: params)).then(function (result) {
clearInterval(checking);
// work with result
}).catch(function (error) {
clearInterval(checking);
// handle error
});
console.log("Stack is being created, hang on...");
我正在寻找更优雅的方式在测试期间刷新网页(我使用Selenium2)。我只是发送F5键,但我想知道驱动程序是否有刷新整个网页的方法。这是我的代码 对于在手动刷新的页面上查找元素,可能有更好的解决方案
问题内容: 我正在寻找一种更优雅的方法来在测试过程中刷新网页(我使用Selenium2)。我只是发送F5键,但我想知道驱动程序是否具有刷新整个网页的方法,这是我的代码 也许是在手动刷新的页面上查找元素的更好的解决方案 问题答案: 在Java或JavaScript中: 这应该刷新页面。
我第一次做硒测试。在主页上,我调用了一些AJAX,我希望Selenium等待元素加载完成。我不确定它是否有效,但我只是键入selenium,waitForCondition可以选择。 无论我选择什么,它总是返回“false”。我现在连等待条件都不工作吗? 我如何测试它是否有效?在这些代码中我做错了什么? 如果由自己的类实现,则返回“true” isElementPresent(By.xpath(“
之前介绍过的所有阻塞调用,将会阻塞一段不确定的时间,将线程挂起直到等待的事件发生。在很多情况下,这样的方式很不错,但是在其他一些情况下,你就需要限制一下线程等待的时间了。这允许你发送一些类似“我还存活”的信息,无论是对交互式用户,或是其他进程,亦或当用户放弃等待,你可以按下“取消”键直接终止等待。 介绍两种可能是你希望指定的超时方式:一种是“时延”的超时方式,另一种是“绝对”超时方式。第一种方式,
如果吊舱已经处于状态,我还希望命令立即返回。但这不会发生。 kubectl wait不是我要找的命令吗?
我正在为以下问题而苦苦挣扎:我的javafx应用程序中有一个类似弹出窗口的东西,它应该阻止应用程序,直到用户输入一些。它不是一个单独的阶段,我可以在其中调用showAndWait(),然后返回阶段的输入。弹出窗口实现为窗格,该窗格放置在其他组件之上。现在我做这样的事情: 所以我希望pp.getInput()等待,直到用户按OK/CANCEL/APPLY/...按钮在我的弹出窗口中。在这种情况下,我