Javascript承诺,嵌套函数

Javascript承诺,嵌套函数,javascript,promise,Javascript,Promise,我的问题是,我正在运行node.js,我有两个函数需要按特定顺序运行,但是它们现在没有返回承诺。所以我想知道如何重写它以确保主函数返回一个承诺,如果我有嵌套函数,我是否只运行第一个函数中的第二个函数 代码如下: handleMd5Convert = (file) => { fs.readFile(file, (err, buf) => { fs.rename(file, directoryPath + md5(buf) + '.mp3', (err) => {

我的问题是,我正在运行node.js,我有两个函数需要按特定顺序运行,但是它们现在没有返回承诺。所以我想知道如何重写它以确保主函数返回一个承诺,如果我有嵌套函数,我是否只运行第一个函数中的第二个函数

代码如下:

handleMd5Convert = (file) => {
  fs.readFile(file, (err, buf) => {
    fs.rename(file, directoryPath + md5(buf) + '.mp3', (err) => {
      if (err) console.log('ERROR: ' + err);
    })
  })
})
HandleMD5转换器应该能够。
then()


/Alex

您可以使用
新承诺创建承诺,如下所示:

var myPromise = function(resolve) {
    someAsyncMethod(param1, callback(x){
        resolve (x);
    });
}
这样
myPromise
就能够
。然后()。只有在您调用
resolve()


您应该能够将整个事情包装在一个
newpromise()
中,并使用
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))

这里的resolve()不应该包含任何内容?或者只是emtpy()就可以了?如果我现在控制台记录这个,它将返回未定义,但可能不应该返回anything@AlexanderMunckAfRosenschöld这不是必需的,但是如果您想在
中检索某个值,那么()
可以解析该值。您可以:
resolve(someValue)
然后在承诺解决后,您可以在
中获得它,然后(someValue=>{/*使用someValue*/})
。在这种情况下,您似乎没有什么需要解决的问题,但可能最终文件名之类的东西会有意义。非常感谢您的帮助@AlexanderMunckafforsenschöld如果答案对你有效,你应该将其标记为“已接受”。通过单击此答案投票按钮下方的勾号来执行此操作。为什么要编写
返回拒绝(err)
而不是
拒绝(err)
?(在
fs.readFile
函数的回调内)
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))