在作为回调一部分的嵌套函数中传递或访问变量

x

您好,我有以下代码:

function outer() {

    try {
        ScriptLoader.getScripts('proj4script',proj4Callback);
    }
    catch(e) {console.log(e);}

    function proj4Callback() {
        x = proj4(some geo coord calcs here);
    }

    // I need access to the values stored in x here
}

从代码中可以看到,我使用脚本加载器将proj4脚本加载到环境中。不幸的是,此脚本加载器没有返回值。脚本加载器的参数之一是回调函数-该函数不能接受任何参数。

我正在尝试访问我在外部函数中的回调函数内部计算的数据。我有没有办法在外部函数之外不使用全局变量呢?

编辑:

@Trinot我不确定继续异步调用模式的含义,您的意思是这样的:

function main() {
    x = await new Promise(outer());
}

async function outer().then({

    await new Promise(ScriptLoader.getScripts.bind(ScriptLoader, 'proj4script'));
    let x = proj4(/*some geo coord calcs here*/);

    return x;
})
亭子

您需要接受回调的异步性质。因此,您不应尝试以同步方式进行编码将需要的代码x放在回调中,或从该回调中调用传递x给另一个函数的函数,等等。无论您做什么,都需要从该回调中继续执行。

现在,有另一种现代的方法可以解决此问题:分配getScript方法,并使用async/ await

async function outer() {
    await new Promise(ScriptLoader.getScripts.bind(ScriptLoader, 'proj4script'));
    let x = proj4(/*some geo coord calcs here*/);
    console.log(x);
    return x;
}

这将中断函数执行,直到该getScripts方法调用回调(在本例中为Promise解析器)为止调用后,执行将在await语句之后执行,并且可以访问您需要计算的变量x

但是请注意,调用 的代码outer将在脚本加载之前继续执行。如果您还有依赖于已加载脚本的代码,则必须将then方法链接到outer调用,或将该代码也放置在async/await构造中。

假设您return x;使用上述功能,这就是它的外观

async function main() {
    let x = await outer();
    // rest of code that depends on the loaded script
}
main();
// Don't put anything here that needs the loaded script, as it will execute sooner. 

要不然:

outer().then(function (x) {
    // rest of code that depends on the loaded script
}
// Don't put anything here that needs the loaded script, as it will execute sooner. 

注意:您可以像将其包装一样将其包装await在一个try块中,但是可以catch在该outer()调用绑定一个方法调用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在对象中定义一个函数,并将变量作为函数的一部分

如何在angularJs 1.5中将$ scope变量作为组件的templateUrl的一部分传递?

Django-作为包含的一部分传递flatpage.title变量

使用变量作为语句的一部分

函数未作为本机反应中道具的一部分传递

作为类函数一部分的 SQL 查询中的 PHP 变量未按预期工作

如何使用函数参数作为变量的一部分?

通过Rest调用在json中传递fk作为DerivedIdentities的一部分

尝试在 Swift 3.0 中访问数组作为 JSON api 的一部分

Javascript运行时的哪一部分负责将回调放入回调队列中?

使用“for 循环”中的 i 作为变量的一部分

将变量从代码的一部分传递到另一部分

将作为struct一部分的数组作为uint8_t指针传递给函数

在 Python 中的函数内用作变量名一部分的参数

将 Jquery 函数参数作为动态控制的下拉选项的一部分传递到 PHP 函数中

作为结构调用的一部分,如何在一行中编写变量名称?

局部变量作为全局变量的一部分

如何使用变量内容作为其他变量名称的一部分?

如何在 OCaml 中输出一个空元组作为函数的一部分?

ElasticSearch聚合嵌套字段作为父文档的一部分

嵌套的SELECT作为字段列表的一部分

读取嵌套的大括号作为字符串的一部分

是否可以将Groovy闭包定义为变量传递给函数以执行,而另一个变量作为传递的调用的一部分?

在 terraform 的网络模块中添加服务端点作为子网变量的一部分

使用SSIS变量(@ [User :: FileName])作为“执行Sql Server任务”中UPDATE的一部分?

将json的一部分(当前作为字符串)分配给JavaScript中的变量

如何更改变量中存在的路径字符串(作为循环的一部分)?

从注册表中捕获作为键名一部分的GUID,并将其转换为变量

如何通过一个环境变量作为命令的一部分