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