簡體   English   中英

Javascript Promise,嵌套函數

[英]Javascript promise, nested functions

我的問題是,我正在運行node.js,並且我有2個功能需要按特定順序運行,但是在此情況下它們沒有返回承諾。 因此,我想知道如何重寫該代碼以確保主函數將返回一個Promise,並且如果我具有嵌套函數,我是否只運行第一個函數解析的第二個函數?

這是代碼:

handleMd5Convert = (file) => {
  fs.readFile(file, (err, buf) => {
    fs.rename(file, directoryPath + md5(buf) + '.mp3', (err) => {
      if (err) console.log('ERROR: ' + err);
    })
  })
})

HandleMd5Convert應該能夠。 then()

/亞歷克斯

您應該能夠將整個內容包裝在new Promise()並使用resolve()reject()處理成功和錯誤:

handleMd5Convert = (file) => {
  return new Promise((resolve, reject) => {
    fs.readFile(file, (err, buf) => {
      if (err) return reject(err)
      fs.rename(file, directoryPath + md5(buf) + '.mp3', (err) => {
        if (err) return reject(err);
        resolve()
      })
    })
  })
}

handleMd5Convert('test.txt')
.then(() => console.log("done"))
.catch(err => console.log("error:", err))

您可以像下面這樣使用new Promise創建一個new Promise

var myPromise = function(resolve) {
    someAsyncMethod(param1, callback(x){
        resolve (x);
    });
}

這樣, myPromise .then() 僅在您調用resolve()之后,諾言才會完成

myPromise.then(function(result){
    // Your code here...
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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