javascript - Javascript - 处理异步竞争条件
问题描述
删除之前注意: 我意识到类似的问题已经被问过很多次了,但是我花了几个小时尝试使用其他人的回复来实现这个,最近这个线程中来自 noseratio 的回复等待一个函数的正确方法在继续之前完成?并没有成功。
我有一个 nodeJS 服务器,它在我的函数 f1 请求它时成功返回数据,另一个函数 f2 调用 f1 然后打算对这个异步函数的输出做一些事情。我正在尝试使用 async/await 语法和 f2 中的附加承诺来做到这一点,如下所示。
async function f1(){
try{
let response = await fetch('MY SERVER URL');
let data = await response.json();
return await data;
}
catch(e) {
alert(e);
}
};
function f2() {
var promise = f1();
promise.then(function(result) {
JSONdata = promise.markers;
console.log("JSON read into f2");
})
console.log(JSONdata);
然后 f2 继续做其他事情......
但是问题是我遇到了竞争条件,结果 f1 没有及时返回,无法对它做任何事情,因此变量是未定义的。
任何有关如何减轻这种情况的帮助将不胜感激,谢谢。
解决方案
坚持这个模式。
async func1() {
console.log('this is async function')
return JSON.parse(await fetch(options))
}
func2 () {
console.log('this is not async function')
}
if(await func1()){
func2()
}
而且你在函数 1 中有太多的等待。只等待承诺的返回。而且你不应该在这个级别混淆'.then'和'await'语法。尝试坚持一种模式,然后探索另一种模式。然后混合它。
推荐阅读
- javascript - mouseenter 和 mouseover 以及 mouseout 和 mouseleave 有什么区别?
- javascript - 实现滚动类别 div
- r - Shiny:如何使用 Plotly 在箱形图上添加中线?
- react-native - 渲染子组件或从父组件调用子组件的方法,反之亦然[React Native]
- javascript - 使用 JavaScript 从提供的数据中解析
- javascript - 如何在 REACT 中使用选择表单更改请求 api?
- ssis - ODBC 批量大小
- javascript - 提交表单验证,刷新页面并无法继续
- python - Python 脚本突然无法在 PowerBI 服务上运行
- c# - Textbox.Text 重新排列字符串内容