2017-08-28 153 views
1

我的猫鼬函数忽略承诺查询瞬间下降到年底,而无需等待另一个步骤猫鼬承诺不工作

exports.editProduct = (id, data) => { 
    Product.findById(id) 
    .then((data) => { 
     var imgS3arr = data.img; 
     var tempArr = []; 
     var i = imgS3arr.length 
     while (i--) { 
      if (!imgS3arr[i].match(/https:\/\/s3.eu-central-1.amazonaws.com\/es-shop\//g)) { 
       tempArr.push(imgS3arr[i]) 
       imgS3arr.splice(i, 1) 
      } 
     } 
     return tempArr 
    }) 
    .then((tempArr) => { 
     var tempArrS3 = [] 
     return Promise.all(tempArr.map((img, i) => { 
      return fetch.remote(img).then((base) => { 
       var buf = Buffer.from(base[0], 'base64'); 
       var imgS3 = { 
        Key: data.title.replace(/()|(")/g, "_") + "_" + Math.random().toString(36).substring(2), 
        Body: buf, 
        ContentEncoding: 'base64', 
        ContentType: 'image/jpeg' 
       }; 
       return s3Bucket.putObject(imgS3).promise().then((data) => { 
        tempArrS3.push('https://s3.eu-central-1.amazonaws.com/es-shop/' + imgS3.Key) 
        console.log(tempArrS3) 
       }).catch((err) => { 
        throw err; 
       }); 
      }); 
     })) 
     .then((tempArrS3) => { 
      edited.title = data.title; 
      edited.img = imgS3arr.concat(tempArrS3); 
      return edited 
     }); 
    }) 
    .then((edited) => { 
     console.log(edited) 
     return edited.save(); 
    }); 
    } 

There is a point where I call this function

我想,我使用的承诺不正确

可以将某些有人帮助我解决这个问题吗?

+0

你应该是'返回Product.findById(ID)'或'(ID,数据)=> Product.findById(ID)',因为你的外部函数定义没有返回一个Promise。如果初始调用不是“返回”,那么从链中最后一项返回一个Promise没有意义。 –

+0

请在编写代码时特别注意JavaScript。将你的代码分成逻辑函数。使用回调/承诺使其不可读取非常快。你错过了一些'.catch'寿,这可能是一个问题。 –

回答

2

你忘记调用return声明editProduct功能:

exports.editProduct = (id, data) => { 
    return Product.findById(id); 
    ... 
+0

谢谢!最后工作 –