Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 异步回调导致变量为空_Javascript_Node.js - Fatal编程技术网

Javascript 异步回调导致变量为空

Javascript 异步回调导致变量为空,javascript,node.js,Javascript,Node.js,有一些非常简化的伪ish代码可以理解我代码的结构 解决异步回调难题的简单方法是什么。 在requestOption中使用令牌时,该令牌将为空。因此,由于缺少令牌,下面使用requestOption不会给出任何结果 var token = '' var auth1 = someData var auth2 = someFunc(auth1) var auth3 = someOtherData var auth4 = someOtherFunc(auth3) var finalAuth = some

有一些非常简化的伪ish代码可以理解我代码的结构

解决异步回调难题的简单方法是什么。
在requestOption中使用令牌时,该令牌将为空。因此,由于缺少令牌,下面使用requestOption不会给出任何结果

var token = ''
var auth1 = someData
var auth2 = someFunc(auth1)
var auth3 = someOtherData
var auth4 = someOtherFunc(auth3)
var finalAuth = someFinalData
var finalAuth2 = finalAuth.someFinalFunc(auth4, cb)
  cb.onSuccess(result)
    token = result.getToken()

var requestOption = {
  someData: ...,
  'authToken': token,
  someMoreData: ...
}
req = request.post(requestOption)
有很多解决方案,其中大多数都包括在一定程度上使用函数。
也许模块化身份验证和处理另一个文件中的请求是有用的

但我想保持它的简单,而不是依赖于这样的东西

var empty = ''
var data = 'xyz'
auth(data, {
    onSuccess: function(res) {
        doSomething(res) 
    }
})

function doSomething(var) {
 // do something
}

到目前为止,我的发现无法帮助我避免代码的过度复杂化。

如果您不想处理承诺和回调,请将函数标记为异步,然后等待结果,是语法糖神奇地为您包装了承诺。在处理post之类的异步函数时,有些函数必须等待响应


如果您不想处理承诺和回调,那么将函数标记为异步,然后等待结果,是语法糖神奇地为您包装了承诺。在处理post之类的异步函数时,有些函数必须等待响应


您应该在成功回调中包含请求逻辑。在您的情况下,带有请求和请求选项的代码在设置令牌的值之前执行,因为auth函数是异步的,服务器需要一些时间来响应。

您应该在成功回调中包含请求逻辑。在您的情况下,带有请求和请求选项的代码会在设置令牌的值之前执行,因为auth函数是异步的,服务器需要一些时间来响应。

基本JavaScript将为您提供处理异步行为的三个主要选项

  • 回调函数(您现在所做的)
  • 函数回调(){
    log('do this');
    setTimeout(()=>console.log('later do this'),2000);
    }
    
    回调()基本JavaScript将为您提供处理异步行为的三个主要选项

  • 回调函数(您现在所做的)
  • 函数回调(){
    log('do this');
    setTimeout(()=>console.log('later do this'),2000);
    }
    
    回调()很难看出你在问什么。该示例与第一个示例完全不同。在任何情况下,如果
    requestOption
    依赖于
    someFinalFunc
    的结果,则必须将其放入回调中。(或者使用async/await)。很难看出您在问什么。该示例与第一个示例完全不同。在任何情况下,如果
    requestOption
    依赖于
    someFinalFunc
    的结果,则必须将其放入回调中。(或使用异步/等待)。