Javascript 以异步方式设置函数参数
我有以下函数,其中我体验到有时调用函数launch时没有params.name集。我不太擅长异步函数,所以我想知道这是否是因为setName在调用launch之前不一定返回? 然后在初始化Javascript 以异步方式设置函数参数,javascript,asynchronous,Javascript,Asynchronous,我有以下函数,其中我体验到有时调用函数launch时没有params.name集。我不太擅长异步函数,所以我想知道这是否是因为setName在调用launch之前不一定返回? 然后在初始化self.params时,将函数调用放在三元函数中会有帮助吗 projectLaunch: function(options) { var self = this; if (options.name === null || options.name === "undefined") { var
self.params
时,将函数调用放在三元函数中会有帮助吗
projectLaunch: function(options) {
var self = this;
if (options.name === null || options.name === "undefined") {
var name = self.setName();
} else {
var name = options.name;
};
self.params = {
name: name
};
launch(self.params);
},
setName = function() {
return encodeBase64(User.name, Project.name)
}
这都是一个较大对象的一部分,函数projectLaunch在外部调用。这里没有异步功能(我没有实现您的
encodeBase64
,但我不明白为什么它是异步的)
但这不会将函数分配给任何名称,也不会调用它:
function(options) {
...
}
因此,无法从我们看到的代码中调用launch
如果您想创建一个,请将其修复为
(function(options) {
...
})({});
如果在
options.name
中需要非空字符串,则使用传递值或其他值的最简单解决方案如下:
var name = options.name || self.setName();
事实上代码很奇怪。它看起来像是从更复杂的东西中复制出来的……这段代码是对先前版本代码的回答。在编辑我的答案之前,我在等待一个固定的问题。这基本上回答了我的问题。我只是想知道调用
launch()
后,setName()
是否可以返回。如果不是这样,那么我的错误肯定在其他地方。系统提出了一个很好的观点:如果定义了options.name
,则无法正确测试。请参阅编辑后的答案中的我的建议。您编辑的代码无法编译。您能否构建一个最小的工作示例,以便我们可以查找您的问题。这是:options.name===null | | | options.name==“undefined”
应该是:options.name==null | | options.name==undefined
,或者就是这样:options.name==null
(两倍而不是三倍=
)对,这也是一个打字错误。我实际上是在用一个options.name==null
检查falsy。