如何访问 promise 中的函数参数
How to access function parameters inside a promise
我有以下功能:
var makeNewContextMenu = function( metadata, $toggle, $after){
dataStore.getCollaboration(metadata._mountTarget).then(function(data){
//need to access metadata, $toggle and $after inside promise
})
}
我如何能够访问我承诺中的元数据、$toggle和$after?
您可以完全按照代码显示的方式使用它们。 父作用域中的变量或参数可用于内联函数(如 .then()
处理程序)。
var makeNewContextMenu = function( metadata, $toggle, $after){
dataStore.getCollaboration(metadata._mountTarget).then(function(data){
// this works!
console.log(metadata);
console.log($toggle);
console.log($after);
})
}
您可能无法访问父作用域中定义的变量或参数的唯一原因是某些干预作用域定义了同名的变量或参数。 在这种情况下,离您较近的作用域具有优先权,并且作用域较大的变量被同名的较近作用域变量"隐藏",如果不重命名一个不具有相同名称的变量,则无法访问作用域较大的变量。 但是,这不是你的情况。
在您的评论中,您询问如何获取包含 metadata
、 $toggle
、$after
和 data
的返回值。 由于dataStore.getCollaboration()
是异步的,这意味着它的响应在将来的某个时候可用,但makeNewContextMenu()
立即返回,因此您无法直接从makeNewContextMenu()
返回data
。 但是,您可以返回承诺,并使所需的数据成为承诺的实现值,如下所示:
var makeNewContextMenu = function( metadata, $toggle, $after){
return dataStore.getCollaboration(metadata._mountTarget).then(function(data){
return {
metadata: metadata,
$toggle: $toggle,
$after: $after,
data: data
};
})
}
makeNewContextMenu(...).then(function(info) {
console.log(info.metadata);
console.log(info.$toggle);
console.log(info.$after);
console.log(info.data);
});
请注意,您实际上不必在此返回的数据结构中放入metadata
、$toggle
和$after
,因为它们是作为参数传入的makeNewContextMenu()
因此它们已经在调用makeNewContextMenu()
的范围内可用。 您可以在那里直接引用它们并使用它们的原始变量。
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- AngularJS:我可以跳过函数参数回调吗
- 为什么不'我们在javascript中使用函数参数的数据类型
- 使用闭包共享构造函数参数
- 函数参数的值错误
- 当一个重要的构造函数参数丢失时应该发生什么
- 阻止ReSharper将JavaScript函数参数放到新行中
- 根据函数参数将CSS值存储在var中,然后对其进行操作
- 使构造函数参数具有ES6类方法的特权
- 当客户端将两个按钮的javascript函数参数修改为相同时,SQL/PHP会更新多行
- Windows.Networking.EndpointPair构造函数参数
- 是否可以使用Sinon.JS检查函数参数绑定是否正确
- 大括号中的Javascript函数参数
- jQuery 无法使用 AJAX 调用访问函数内部的函数参数
- 将JSON字符串转换为函数参数
- eval()读取函数参数有多糟糕
- Javascript不能在一个命令中使用函数参数
- 函数参数在内部不可见,返回新的Promise(函数(resolve,reject).传递给被promise化的函数的
- ES6类构造函数参数
- 是否可以在javascript函数参数列表中调用多个函数