Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.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_Json_Callback_Return Value_Es6 Promise - Fatal编程技术网

从函数返回对象响应-Javascript

从函数返回对象响应-Javascript,javascript,json,callback,return-value,es6-promise,Javascript,Json,Callback,Return Value,Es6 Promise,异步/同步之间的区别让我有点困惑。有一点背景知识,我正在尝试编写一个使用回调和承诺的程序。我试图创建嵌套的请求,但是对象的值没有传递这些请求,所以我创建了一个函数,该函数接受JS对象的输入,修改它,然后返回JS对象。修改将包括一个API调用,该调用查找要添加到JS对象的另一个字段 我可以通过类似的方法来实现这一点: TEST1 function(....){ // do stuff request.get(options, function(error, re

异步/同步之间的区别让我有点困惑。有一点背景知识,我正在尝试编写一个使用回调和承诺的程序。我试图创建嵌套的请求,但是对象的值没有传递这些请求,所以我创建了一个函数,该函数接受JS对象的输入,修改它,然后返回JS对象。修改将包括一个API调用,该调用查找要添加到JS对象的另一个字段

我可以通过类似的方法来实现这一点:

  TEST1 function(....){
        // do stuff
        request.get(options, function(error, response, body) {
                  // do stuff to get js object
                  jsobject = objectModification(jsobject); //modified js object
       });
  }

  objectModification function(jsobject) {
        request.get(options, function(error, response, body) {
                  // do stuff to modify js object
       });
        return jsobject;
  }      

您可以将回调函数传递给
objectModification
,以便在
jsobject
的最终版本准备就绪时通知调用者,以及它是什么:

function TEST1(....){
    var options = { ... };
    request.get(options, function(error, response, body) {
        // do stuff to get js object, for example:
        jsobject = response;
        // modify jsobject asynchronously:
        objectModification(jsobject, function (jsobject) {
            // here we have the final version of jsobject.
        });
    });
}

function objectModification(jsobject, done) {
    var options = { ... };
    request.get(options, function(error, response, body) {
        // do stuff to modify js object, for example:
        jsobject.newProperty = response;
        // Then call callback function to pass the modified js object        
        done(jsobject);
    });
}

您可以将回调函数传递给
objectModification
,以便在
jsobject
的最终版本准备就绪时通知调用者,以及它是什么:

function TEST1(....){
    var options = { ... };
    request.get(options, function(error, response, body) {
        // do stuff to get js object, for example:
        jsobject = response;
        // modify jsobject asynchronously:
        objectModification(jsobject, function (jsobject) {
            // here we have the final version of jsobject.
        });
    });
}

function objectModification(jsobject, done) {
    var options = { ... };
    request.get(options, function(error, response, body) {
        // do stuff to modify js object, for example:
        jsobject.newProperty = response;
        // Then call callback function to pass the modified js object        
        done(jsobject);
    });
}

我认为你的函数调用应该是<代码>jsobject=objectModification(响应)。。。如果你使用承诺,这可能会简单得多…这会奏效吗?当我使用上面解释的函数方法时,它不断返回“未识别”,我看不出您正在执行的请求是什么。。。所以,如果你得到
未定义的
,那是因为这是你从
请求中得到的。。。什么是
请求
?,你在点击什么url?。代码缺少提供更精确解决方案的关键部分。据我所知,请求很好地更新了对象,但是整个JS对象没有从函数“objectmodification”传递到test1,它正在丢失它的值并更改为未定义您无法从回调函数返回结果我认为您的函数调用应该是<代码>jsobject=objectModification(响应)。。。如果你使用承诺,这可能会简单得多…这会奏效吗?当我使用上面解释的函数方法时,它不断返回“未识别”,我看不出您正在执行的请求是什么。。。所以,如果你得到
未定义的
,那是因为这是你从
请求中得到的。。。什么是
请求
?,你在点击什么url?。代码缺少提供更精确解决方案的关键部分。据我所知,请求更新对象很好,但是整个JS对象没有从函数“objectmodification”传递到test1,它正在丢失其值并更改为undefinedyou无法从回调函数返回结果