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