Javascript 以异步方式设置函数参数

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

我有以下函数,其中我体验到有时调用函数launch时没有params.name集。我不太擅长异步函数,所以我想知道这是否是因为setName在调用launch之前不一定返回? 然后在初始化
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。