首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >mypromise.then内部函数的返回值

mypromise.then内部函数的返回值
EN

Stack Overflow用户
提问于 2017-06-30 16:51:49
回答 1查看 2.2K关注 0票数 0

我正在尝试从异步承诺中获得响应,一旦.then决定清理json响应,就会运行一个函数。

然后把这个价值还给承诺..。然后将诺言返回给前端调用它的函数。

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

代码语言:javascript
运行
复制
vimeo = function(album_id) {

    var url = '';
    url += 'https://api.vimeo.com/users/vimeouser123/albums/';
    url += album_id;
    url += '/videos?direction=asc&sort=date';
    url += '&fields=uri,name,description,pictures';

    var options = {     
        url: url,
        method: 'GET',
        headers: {
            'Authorization': 'Bearer abc123',
            'Content-Type': 'application/json',
        }
    };

    var vimeocall = new Promise(function(resolve, reject) {
        request(options, function(err, response, body){

            if(true){resolve(body)};

        });
    });

    vimeocall.then(function(result) {
        return vimeo_clean_data(result);    
    });

    return vimeocall;
}

因此,在api调用之后,这个承诺返回ok (vimeo_clean_data(结果);函数运行良好,并控制日志的代码)。

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

我如何才能让它将干净的json返回到相应的承诺,然后返回,或者将数据返回到调用它的前端函数

(作为参考,它是一个调用它的meteor方法,它返回承诺和数据,而不是promise.then部分)

EN

回答 1

Stack Overflow用户

发布于 2017-06-30 17:00:47

您将不返回vimeocall,而是返回以前调用的vimeocall.then

代码语言:javascript
运行
复制
return vimeocall.then(function(result) {
    return vimeo_clean_data(result);    
});

当您按承诺调用.then时,它总是会返回另一个承诺,该承诺将随着回调的返回而得到解决(或者被拒绝,并捕捉到任何错误)。

https://promisesaplus.com/#point-40

那就必须还承诺3.3。 promise2 =允诺1.然后(onFulfilled,onRejected);

  • 如果onFulfilledonRejected返回值x,则运行允诺解析过程[[Resolve]](promise2, x)
  • 如果onFulfilled或onRejected抛出异常e,则必须以e作为原因拒绝promise2
  • 如果onFulfilled不是一个函数,并且实现了promise1,则必须使用与promise1相同的值来实现promise2
  • 如果onRejected不是函数,而promise1被拒绝,则必须以与promise1相同的理由拒绝promise2

另一个选择

您只需将对vimeo_clean_data()的调用放在最初的承诺回调中:

代码语言:javascript
运行
复制
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(),并得到返回的承诺的结果。(别忘了处理/传播可能的错误!)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44851474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档