我正在尝试从异步承诺中获得响应,一旦.then决定清理json响应,就会运行一个函数。
然后把这个价值还给承诺..。然后将诺言返回给前端调用它的函数。
(或者可能一个接一个,只是一种很好的清洁模式)
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部分)
发布于 2017-06-30 17:00:47
您将不返回vimeocall,而是返回以前调用的vimeocall.then。
return vimeocall.then(function(result) {
    return vimeo_clean_data(result);    
});当您按承诺调用.then时,它总是会返回另一个承诺,该承诺将随着回调的返回而得到解决(或者被拒绝,并捕捉到任何错误)。
https://promisesaplus.com/#point-40
那就必须还承诺3.3。 promise2 =允诺1.然后(onFulfilled,onRejected);
onFulfilled或onRejected返回值x,则运行允诺解析过程[[Resolve]](promise2, x)。onFulfilled或onRejected抛出异常e,则必须以e作为原因拒绝promise2。onFulfilled不是一个函数,并且实现了promise1,则必须使用与promise1相同的值来实现promise2。onRejected不是函数,而promise1被拒绝,则必须以与promise1相同的理由拒绝promise2。另一个选择
您只需将对vimeo_clean_data()的调用放在最初的承诺回调中:
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(),并得到返回的承诺的结果。(别忘了处理/传播可能的错误!)
https://stackoverflow.com/questions/44851474
复制相似问题