我有一个foo发出Ajax请求的函数.我怎样才能从中回复foo?
我尝试从success回调中返回值,并将响应分配给函数内部的局部变量并返回该变量,但这些方法都没有实际返回响应.
function foo() {
var result;
$.ajax({
url: '...',
success: function(response) {
result = response;
// return response; // <- I tried that one as well
}
});
return result;
}
var result = foo(); // It always ends up being `undefined`.
Run Code Online (Sandbox Code Playgroud) 这里是 Javascript/Cypress 的相对新手。我正在使用 Cypress Cucumber.js 插件运行一些测试。问题是我无法让我的步骤按顺序运行 - 由于 js 的异步性质,“Then”步骤在“Given”等之前运行。显然,这会成为一个问题,因为测试会失败!
我的问题:
1)我们如何使用异步代码使黄瓜步骤始终按顺序运行?我在这里看到了类似的问题:How to wait for a JavaScript Promise to resolve before resuming function? ,并根据我对给定块应用 async/await 的响应,希望它会在我的步骤中强制执行命令,但这不起作用。
这是我的功能文件:
Given I get the data from CMS
Then I can verify that the title is the same as the CMA title in tab "0"
And I can verify that the link is the correct link in tab "0"
Run Code Online (Sandbox Code Playgroud)
脚步:
Given('I get the data from CMS', async() => {
let api = await …Run Code Online (Sandbox Code Playgroud) 我目前正在开发一个将 chart.js 移植到 blazor的端口。在那里,我们从 JavaScript 到 C# 进行互操作,反之亦然。Chart.js 支持自定义刻度回调或onClick,onHover和onLeave图例处理程序等回调。为了让这些回调调用 C#,我们设置了一个函数,...args该函数通过 blazor 调用 C# 方法。Blazor 然后从 C# 方法中获取结果并将其返回给 JavaScript。这样我们就可以在两者之间进行充分的沟通。
当我们需要担心返回值时(比如自定义刻度回调),我们需要确保 chart.js 获得正确的值。在(服务器端)blazor 中,您只能与 JavaScript 异步通信,因为它构建在 websockets 上。这意味着此类互操作调用的返回值始终是一个Promise对象,而 chart.js 不理解这一点。
现在我想知道我可以做什么。chart.js 有没有办法使用异步回调?
附言。我对 Javascript 没有经验。我已经问过另一个关于同步等待承诺(在同一上下文中)的问题,但这不起作用。
pps。在这个专门的 github 问题中有更多信息(但主要是在 C# 方面)。
javascript ×3
ajax ×1
asynchronous ×1
blazor ×1
c# ×1
chart.js ×1
cucumber ×1
cucumberjs ×1
cypress ×1
jquery ×1
node.js ×1