Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.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 mypromise.then内函数的返回值_Javascript_Json_Node.js_Return Value_Es6 Promise - Fatal编程技术网

Javascript mypromise.then内函数的返回值

Javascript mypromise.then内函数的返回值,javascript,json,node.js,return-value,es6-promise,Javascript,Json,Node.js,Return Value,Es6 Promise,我正在尝试从异步承诺获取响应。然后在解析后对其运行函数以清理json响应 然后将该值返回到承诺中。。然后将承诺返回给在前端调用它的函数 (或者一个接一个的,只是一个很好的清洁模式) 因此,在api调用之后,承诺返回ok,vimeo_clean_数据(结果);函数运行正常,控制台运行正常。日志是清理后的代码 我可以让它返回到对客户端的主要承诺,但这是原始json响应 我该如何让它将干净的json返回给promise,而promise又会被返回,或者只是将数据返回给调用它的前端函数 (作为参考,这是

我正在尝试从异步承诺获取响应。然后在解析后对其运行函数以清理json响应

然后将该值返回到承诺中。。然后将承诺返回给在前端调用它的函数

(或者一个接一个的,只是一个很好的清洁模式)

因此,在api调用之后,承诺返回ok,vimeo_clean_数据(结果);函数运行正常,控制台运行正常。日志是清理后的代码

我可以让它返回到对客户端的主要承诺,但这是原始json响应

我该如何让它将干净的json返回给promise,而promise又会被返回,或者只是将数据返回给调用它的前端函数


(作为参考,这是一个meteor js方法调用它,它返回的是承诺和数据,而不是承诺。然后是部分)

而不是返回
vimeocall
您将希望返回上一次调用的返回
vimeocall。然后

return vimeocall.then(function(result) {
    return vimeo_clean_data(result);    
});
当您调用
。然后
一个承诺时,它将始终返回另一个承诺,该承诺将随着传入回调的返回而得到解决(或由于捕获到任何错误而被拒绝)

然后必须返回一个承诺[3.3]

promise2 = promise1.then(onFulfilled, onRejected); 
  • 如果
    onCompleted
    onRejected
    返回值
    x
    ,请运行承诺解决过程
    [[Resolve]](promise2,x)
  • 如果
    onFulfille
    d或
    onRejected
    引发异常
    e
    promise2
    必须以
    e
    为理由予以拒绝
  • 如果
    oncompleted
    不是一个函数,并且
    promise1
    已实现,
    promise2
    必须使用与
    promise1
    相同的值来实现
  • 如果
    onRejected
    不是一个函数,并且
    promise1
    被拒绝,则必须以与
    promise1
    相同的理由拒绝
    promise2
或者 您可以将对
vimeo_clean_data()
的调用放在原始promise回调中:

return new Promise(function(resolve, reject) {
    request(options, function(err, response, body){

        if(err){
            //either handle the error here or:
            reject(err);
        else {
            resolve(vimeo_clean_data(body))
        };

    });
});

当需要进行多个异步调用时,将代码拆分为多个
then()
调用非常有用。您可以从一个
then()
调用中返回承诺,链中的下一个
then()
将使用返回的承诺的结果进行调用。(别忘了处理/传播可能的错误!)

这是不可能的,你打给vimeo方法的电话应该能够使用承诺。非常感谢/快速回复。。起初我尝试了这两种方法,现在又尝试了一次,以防语法错误。。“传递调用“vimeo”的结果时出现异常:SyntaxError:位置0处JSON中的意外标记u”因此它没有按时间/顺序获取该标记或传递不正确,u表示未定义正确??必须是一些简单的东西谢谢你的时间我喜欢这个方法。然后当你需要说的时候它看起来更干净。然后用干净的结果更新一个db值,或者在一些处理之后更新一个用户配置文件。看起来错误是由你的
vimeo_clean_data
函数抛出的。您可以在传入之前尝试控制台日志
body
。如果它是
未定义的
,那么您的请求选项可能有问题,否则您需要查看
vimeo_clean_data
函数。我以前也尝试过,响应和正文都正常,它在控制台服务器端为清理后的代码输出正确的代码,因此它每次都会将数据传递给该函数,并且它会激发并输出(在服务器控制台上)它只是拒绝返回到客户端??谢谢again@dominic-如果meteor没有将数据传递给客户机,您可能需要为此提出另一个问题。确保在方法内部从vimeo函数返回承诺:
return vimeo(album_id)
meteor将等待承诺解析,然后使用解析值。再次感谢你,这真的很奇怪。。它调用api fine,返回数据fine,它将初始承诺数据返回到客户端ok,它将api调用数据传递到clean data函数并输出服务器端fine,它只是不返回最后一部分,所以它工作了一半。我以前也尝试过你建议的方法(顺便说一句,谢谢!)它只是拒绝将链的最后一部分发送回客户端,它只发送未清理的json。可能只需要使客户端的数据功能变得干净,因为它是非敏感的,并以这种方式“插入”它
return new Promise(function(resolve, reject) {
    request(options, function(err, response, body){

        if(err){
            //either handle the error here or:
            reject(err);
        else {
            resolve(vimeo_clean_data(body))
        };

    });
});