簡體   English   中英

節點文件上傳和同步

[英]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類型調用中的東西是我的第一個想法,但是有更好的方法嗎?

上傳完成后,將callbacksaveFile並使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM