Cloudinary api - 解决承诺
Posted
技术标签:
【中文标题】Cloudinary api - 解决承诺【英文标题】:Cloudinary api - resolve promise 【发布时间】: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 有关。我似乎无法重组我的代码以使其工作。任何帮助将不胜感激。
【问题讨论】:
【参考方案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();
【讨论】:
以上是关于Cloudinary api - 解决承诺的主要内容,如果未能解决你的问题,请参考以下文章