Cloudinary api - 解决承诺
Cloudinary api - resolve promise
我想编写一个函数,其中 return 是一个布尔值,指示具有指定 public_id 的图像是否已存在于我的 Cloudinary space。
我可以使用以下代码将结果记录到控制台:
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 有关。我似乎无法重组我的代码以使其工作。任何帮助将不胜感激。
问题是 cloudinary.api.resource
异步运行(这就是它需要回调函数的原因)。
您可以使您的 isUploaded
函数 return 成为一个 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);
})
请注意 api.resource()
有速率限制(Admin API 的一部分),因此这不是 "scalable" 解决方案。
您可以执行 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();
我想编写一个函数,其中 return 是一个布尔值,指示具有指定 public_id 的图像是否已存在于我的 Cloudinary space。
我可以使用以下代码将结果记录到控制台:
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 有关。我似乎无法重组我的代码以使其工作。任何帮助将不胜感激。
问题是 cloudinary.api.resource
异步运行(这就是它需要回调函数的原因)。
您可以使您的 isUploaded
函数 return 成为一个 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);
})
请注意 api.resource()
有速率限制(Admin API 的一部分),因此这不是 "scalable" 解决方案。
您可以执行 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();