我的代码如下:
myAsync().then((text) => {
console.log(text);
});
async function myAsync() {
cbFunction("Hello world ", function(result) {
return result;
});
}
function cbFunction(myString, callback) {
callback(myString + "test");
}
我期待“ Hello world测试”
相反,我得到“未定义”。
上面的代码为什么不起作用?
答案 0 :(得分:1)
myAsync
没有return
语句。通常,这意味着它将返回undefined
,但是由于它是async
,因此它将返回一个Promise,该Promise立即解析,没有数据。
如果您想返回一个可解决cbFunctin
中数据的承诺,则需要明确退回该Promise并致电resolve(result)
。
答案 1 :(得分:0)
myAsync().then((text) => {
console.log(text);
});
function myAsync() {
return new Promise((resolve, reject) => {
cbFunction("Hello world ", function (result) {
resolve(result);
});
})
}
function cbFunction(myString, callback) {
callback(myString + "test");
}
将为您提供所需的结果。您需要从myAsync
返回承诺并解决结果。
您需要先学习promise的工作方式,然后才能使用async / await关键字。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
如果主体中没有await关键字,则无需声明函数async,但是,如果要使用await关键字,则可能需要从函数中返回promise。