小编ske*_*tor的帖子

Promise.allSettled 是否在所有情况下都保留响应中的原始顺序?

当同时发出多个请求时Promise.allSettled,响应中的数组顺序是否与请求中的初始数组相对应?无论它们的结算顺序如何,它是否都保持相同的顺序?

const promise1 = new Promise((resolve, reject) => setTimeout(resolve, 2000, 1)); //finish last
const promise2 = Promise.resolve(2); //finish first
const promise3 = new Promise((resolve, reject) => setTimeout(resolve, 100, 3)); //finish in the middle

const promises = [promise1, promise2, promise3];

Promise.allSettled(promises).
  then((results) => results.forEach((result) => console.log(result)));
Run Code Online (Sandbox Code Playgroud)

在测试中这似乎是正确的,但文档中似乎无法保证该顺序将保留。MDN 文档在这里

javascript es6-promise

15
推荐指数
1
解决办法
5924
查看次数

等待同步函数是否同步返回值?

我从一个我不熟悉的内部实用程序库中导入了一个函数。这个库没有文档,我只是假设它是异步的,因为它的名字getUserDetails。我以为它在做一个http请求。

我在这样的异步函数中使用它

async function getAllUserInfo(event) {
    const details = await getUserDetails(event);
    // other stuff
}
Run Code Online (Sandbox Code Playgroud)

我的假设是错误的。一位同事指出这不是异步的。我最终改变了它,但是当我错误地使用它时它仍然有效。我能够等待同步函数并返回正确的数据。

我的问题是关于它是如何工作的。是否在同步函数上添加 await 使其在下一个滴答声中解析,还是像同步函数那样立即返回?

javascript async-await

11
推荐指数
2
解决办法
4035
查看次数

在发生之前检测导航事件 nextjs 13 应用程序路由器,然后防止其发生

使用 nextjs 12(页面路由器),从“next/router”返回的路由器具有您可以侦听和适当处理的导航事件。是文档。

一个具体事件是routeChangeStart。当您希望在用户离开页面之前提示他们时,您已侦听该事件,然后打开一个模式并抛出错误以阻止导航。

对于 nextjs 13(应用程序路由器),从“next/navigation”返回的路由器不具有订阅事件的相同能力。

文档中有一个解决方案可以告诉您路线何时已更改。它使用两个新的钩子

  • usePathname
  • useSearchParams

是该解决方案。

我想在路线即将改变之前知道。

您如何知道 nextjs 13 应用程序(使用应用程序路由器)何时将要导航,以及如何阻止它这样做?

navigation events router onbeforeunload next.js13

8
推荐指数
1
解决办法
1976
查看次数

使用模板文字在 javascript 中构建多行字符串

我正在尝试使用模板文字构建具有多个查询参数的 URL。

为了便于阅读,我将每个查询参数放在单独的行上。它看起来像下面的例子,只是更长。

const url = `http://example.com/hey?
one=${one}&
two=${two}&
three=${three}`;
Run Code Online (Sandbox Code Playgroud)

我的问题涉及制作一个多行文字字符串,该字符串具有最终值,每个参数之间没有换行符 (\n) 字符。模板文字是否可以做到这一点,还是应该以旧方式连接字符串?

javascript multiline template-literals

3
推荐指数
1
解决办法
2040
查看次数

如何使我的测试的一部分可重用,以便可以在未来使用 Cypress Javascript 的其他测试中再次使用或调用它

背景

嗨,我是 cypress 的新手,我有以下代码允许指定的用户类型(总共 4 个)登录。

由于这是主要测试之一,因此不必将相同的代码复制并粘贴到我的每个新测试中,我想让它们可重复使用,以便在未来的测试中,可以再次使用或“调用”它们.

将这些测试保存在单独的文件夹和单独的文件中会更容易,这样它们就可以自己维护,但可以在我创建的任何未来测试文件中在必要时调用它们。

例如,如果我有一个与教师相关的未来测试,我可以调用执行教师登录的函数,然后开始编写实际处理测试的脚本的其余部分,而无需每次都搞砸复制和粘贴.

执行登录部分的代码块如下(对于所有其他类型的用户几乎相同)

我一直在尝试研究如何创建方法和函数,但对我应该使用的结构不太确定,并且查看了文档但我有点困惑。

describe('Create Homework', function() {
  it('Create New Assignment', function() {
  cy.visit('http://www.demoapp.com')
  cy.contains('Log in')

  // Check that the user has indeed landed on the login page
  cy.url().should('include','/login')

  // Make a school selection
  cy.get('#school-selector-search-box')
  .type('Bristol Free School')
  // Click the suggestion
  .get('.suggestions > .ember-view.suggestion:nth-of-type(1) > .suggested-school-name').click()

  // Enter a username at this step
  cy.get('#identification')
  .type('gdawson_4319c')
  .should ('have.value','gdawson_4319c')

  // Enter a password at this step
  cy.get('#password')
  .type('demo')
  .should ('have.value','demo')

  // Proceed …
Run Code Online (Sandbox Code Playgroud)

javascript unit-testing cypress

2
推荐指数
2
解决办法
3525
查看次数