[英]Node file uploads and sychronicity
雖然我通常對節點中的基本異步模式感到滿意,但我遇到了一種情況,在一般同步情況下,我需要從異步調用返回的值。
給定功能:
modelHelper.saveFile = function(field) {
var url = cloudinary.uploader.upload(this.req.files[field.name].path, function(result) {
if(typeof result.url != "undefined" && result.url.length > 0)
{
console.log(" \n\n\n Inside the cloudinary call.");
console.log("\n\n URL = " + result.url);
return result.url;
}
return false;
});
console.log("\n\n\n Outside the load, URL =" + url);
if(!url) return "";
return url;
};
在將文件上傳到服務器的情況下會調用此函數,並通過一個循環遍歷頁面所有元素的簡單循環來調用此函數。 在大多數情況下,這是變量到值的簡單映射,因此我真的不想在此函數中注入next
。
這是來電者:
modelHelper.parseField = function(field) {
var type = field.type;
switch(type) {
case "email":
case "url":
return strings.exists(this.param(field.name)) ?
this.param(field.name) : "";
break;
case "file":
return modelHelper.resolveFile.bind(this)(field);
break;
default:
return strings.exists(this.param(field.name)) ?
strings.makeSafe(this.param(field.name)) : "";
}
而這又被稱為:
modelHelper.populate = function(elements, record, next){
var len = elements.length;
parseField = modelHelper.parseField.bind(this);
while(len--)
if((elements[len]["type"] != "captcha"))
this[record][elements[len]['name']] = parseField(elements[len]);
next.bind(this)();
};
這樣,我正在尋找一種模式,它將阻止執行,直到saveFile中的文件操作返回變量為止; 像將其包裝在setInterval類型調用中的東西是我的第一個想法,但是有更好的方法嗎?
上傳完成后,將callback
給saveFile
並使用url進行saveFile
modelHelper.saveFile = function(field, callback) {
var url = cloudinary.uploader.upload(this.req.files[field.name].path, function(result) {
if(typeof result.url != "undefined" && result.url.length > 0) {
console.log(" \n\n\n Inside the cloudinary call.");
console.log("\n\n URL = " + result.url);
return callback(null, result.url);
}
return callback();
});
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.