最后,Async
/Await
很快将在除IE以外的所有主要浏览器中得到支持。因此,现在我们可以开始使用Async
/Await
编写更易读的代码,但是有一个问题。很多人像这样使用异步等待:
const userResponse = await fetchUserAsync();
const postsResponse = await fetchPostsAsync();
fn task() {
result-1 = doAsync();
result-2 = doAsync();
result-n = doLongAsync();
// handle results together
combinedResult = handleResults(result-1, result-2);
lastResult = handleLastResult(result-n);
}
您可以这样写:
const responses = await Promise.all([
fetchUserAsync(),
fetchPostsAsync(),
]);
const userResponse = responses[0];
const postsResponse = responses[1];
这很容易吧?但有个陷阱。promise.all
具有fain-fast行为,这意味着,一旦其中一个promise被拒绝,它就会被拒绝。可能您想要一个更健壮的解决方案,我们负责处理拒绝,任何取货。幸运的是,有一个解决方案,它可以通过异步
/Await
实现,而不需要使用promere.all
。一个工作示例:
console.clear();
function wait(ms, data) {
return new Promise( resolve => setTimeout(resolve.bind(this, data), ms) );
}
/**
* This will run in series, because
* we call a function and immediately wait for it's result,
* so this will finish in 1s.
*/
async function series() {
return {
result1: await wait(500, 'seriesTask1'),
result2: await wait(500, 'seriesTask2'),
}
}
/**
* While here we call the functions first,
* then wait for the result later, so
* this will finish in 500ms.
*/
async function parallel() {
const task1 = wait(500, 'parallelTask1');
const task2 = wait(500, 'parallelTask2');
return {
result1: await task1,
result2: await task2,
}
}
async function taskRunner(fn, label) {
const startTime = performance.now();
console.log(`Task ${label} starting...`);
let result = await fn();
console.log(`Task ${label} finished in ${ Number.parseInt(performance.now() - startTime) } miliseconds with,`, result);
}
void taskRunner(series, 'series');
void taskRunner(parallel, 'parallel');
/*
* The result will be:
* Task series starting...
* Task parallel starting...
* Task parallel finished in 500 milliseconds with, { "result1": "parallelTask1", "result2": "parallelTask2" }
* Task series finished in 1001 milliseconds with, { "result1": "seriesTask1", "result2": "seriesTask2" }
*/
我是新手,所以如果我错过了一些明显的东西,请事先道歉,但是我不知道如何在WebStrem中运行JavaScript。网络Storm留档说只需在浏览器中打开超文本标记语言文件,但这似乎不起作用。不管怎样,一切都在codepen.io. 以下是超文本标记语言(用于简单的天气应用程序): 这是脚本(仍在草稿中,因为它需要扩展以链接到涵盖“天气”所有值的图像): 非常感谢任何帮助!
为了减少测试的运行时间,我希望并行运行测试。我有几个不能并行运行的类。 假设我有两种类型的类:-并行类-包含类1,类2-不并行类-包含类3,类4我想并行运行类1和类2到类3和类4(但lass3不会并行运行到类4) 我试图这样做: 我并行运行这两个测试,但只有第一个测试具有类的并行性。 如果我可以选择添加parallel=“classes”进行测试,我尝试在TestNG文档中搜索。我看不到,但它正在
我不能在不同浏览器的browserstack中并行运行特性文件(java-maven-intellij)。我能够在我的JUnit框架中实现并行测试,但不知道如何在cucumber Java中实现。你能帮忙吗? 目前,我能够在browserstack上执行测试,但只能在一个浏览器上执行。请看附件
请让我知道是否可以通过TestNG运行并行套件?
主套房.java 对于每个测试套件,都有包含@Test的类 例如 TestSuite1.java TestClass1.java 所以我的问题是如何运行TestSuite1、TestSuite2
我有一套为Cucumber-JVM编写的验收测试。为了减少反馈时间,我想并行运行(功能)的场景。如何以最简单、最方便的方式做到这一点? (我更希望能够在Java代码中表达这一点,作为一个常规的JUnit测试/运行程序,即我不希望使用maven-sureFire或maven-故障安全插件来解决一些问题,这将需要(?)之后对Cucumber报告进行旋转和合并。)