我试图理解为什么这段代码返回“Promise {pending}”。
const reduceDirections = (str) => {
str = str.replace(/northsouth|southnorth|eastwest|westeast/ig, '')
if (str.search(/northsouth|southnorth|eastwest|westeast/ig) === -1) {
str = str.replace(/south|north|west|east/gi, '$& ').replace(/(^\s+|\s+$)/,'')
console.log(str)
return str
} else {
reduceDirections(str)
}
}
async function start(arr) {
str = arr.join('')
let res = await reduceDirections(str)
return Promise.resolve(res)
}
console.log(start(["NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST"]))
当我从reduceDirections()函数中console.log(str)
时,我可以看到我得到了我想要的结果。但是当我(一行后)return str
时,我改为“Promise未决”
我很抱歉不理解 Promise 和 async wait。我尝试在 mdn 上阅读并观看视频,但我不知道如何将它们显示的内容转移到这个问题。预先感谢您的帮助!
最佳答案
几个问题:
1) reduceDirections
中没有发生任何异步操作,也不会返回 Promise,因此对其使用 await
没有任何意义。
2)函数的递归部分不返回递归结果,因此更改:
} else {
reduceDirections(str)
}
至:
} else {
return reduceDirections(str)
}
那么至少你可以希望有一个有用的字符串作为返回值
3)如果你确实坚持对同步返回的东西使用await
,那么你可以保留它,但没有必要这样做
return Promise.resolve(res)
...因为async
函数无论如何总是返回一个promise。所以就这样做
return res;
4) 你不会等待那个 promise 得到解决。因此,您应该等待它的解析值并对其使用 console.log
。变化:
console.log(start(["NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST"]))
至:
start(["NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST"]).then(console.log)
但同样,使用 Promise 在这里毫无用处,只会使代码变得复杂。你不会从中得到任何好处。
关于javascript - Javascript 中的 Promise {pending}、async、await,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58750631/