为什么我的异步函数不与回调结合以产生结果?

时间:2018-07-24 10:44:32

标签: javascript asynchronous promise async-await

我的代码如下:

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测试”

相反,我得到“未定义”。

上面的代码为什么不起作用?

2 个答案:

答案 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。