【问题标题】:Cloudinary api - resolve promiseCloudinary api - 解决承诺
【发布时间】:2017-09-27 19:12:54
【问题描述】:

我想编写一个函数,它返回一个布尔值,指示具有指定 public_id 的图像是否已存在于我的 Cloudinary 空间中。

我可以使用以下代码将结果记录到控制台:

function isUploaded(public_id) {
  cloudinary.api.resource(public_id, function(response){
    console.log(response.hasOwnProperty('public_id'));
  });
};

isUploaded('test');

但是,我想将结果布尔值传递给另一个函数。使用 return 语句会导致 { state: 'pending' } 被记录:

function isUploaded(public_id) {
  return cloudinary.api.resource(public_id, function(response){
    return response.hasOwnProperty('public_id');
  });
};

console.log(isUploaded('test'));

这与 javascript Promises 有关。我似乎无法重组我的代码以使其工作。任何帮助将不胜感激。

【问题讨论】:

    标签: node.js cloudinary


    【解决方案1】:

    问题在于cloudinary.api.resource 异步运行(这就是它需要回调函数的原因)。

    您可以让您的isUploaded 函数返回一个Promise,一旦调用该回调函数就会解析。

    var cloudinary = require('cloudinary');
    
    function isUploaded(public_id) {
      return new Promise(function (resolve, reject) {
        cloudinary.api.resource(public_id, function(response) {
          var isUploaded = response.hasOwnProperty('public_id');
          resolve(isUploaded);
        });
      });
    };
    
    isUploaded('test')
    .then(function (result) {
      console.log(result);
    })
    

    【讨论】:

      【解决方案2】:

      请注意,api.resource() 是速率受限的(Admin API 的一部分),因此这不是一个“可扩展”的解决方案。

      您可以执行 HEAD 请求并获取响应的 statusCode - 200 表示资源存在于您的帐户中,否则为 404。

      例如——

      var http = require('http')
      var options = {method: 'HEAD', host:'res.cloudinary.com',path:'/<cloud_name>/image/upload/<yourimage.jpg>'} 
      var req = http.request(options, function(res) {console.log(res.statusCode);});  
      req.end();
      

      【讨论】:

        猜你喜欢
        • 2021-06-13
        • 2015-06-24
        • 2019-09-29
        • 1970-01-01
        • 2020-03-16
        • 2022-12-05
        • 2018-04-02
        • 2022-01-22
        • 2016-12-06
        相关资源
        最近更新 更多