Using async requires async function, but my function is async

前端 未结 4 769
没有蜡笔的小新
没有蜡笔的小新 2021-01-18 07:44

I\'m adapting a library that uses callback to use Promises. It\'s working when I use then(), but it doesn\'t work when I use await.



        
相关标签:
4条回答
  • 2021-01-18 08:21

    You may not need async await abstraction really. Why don't you just simply promisify dbc.solve() function with a promisifier like;

    function promisify(f){
      return data => new Promise((v,x) => f(data, (err, id, sol) => err ? x(err) : v({i:id, s:solution})));
    }
    

    You will have a promisified version of your dbc.solve() and if it doesn't fire an error you will be returned with an object like {i:id, s: solution} at it's then stage.

    0 讨论(0)
  • 2021-01-18 08:36

    The await operator can only be used in an async function.

    0 讨论(0)
  • 2021-01-18 08:41

    SyntaxError: await is only valid in async function - just like the error tells you, you may only use await inside a function which is marked as async. So you cannot use the await keyword anywhere else.

    https://basarat.gitbooks.io/typescript/docs/async-await.html

    https://www.typescriptlang.org/docs/handbook/release-notes/typescript-1-7.html

    examples:

    function test() {
      await myOtherFunction() // NOT working
    }
    
    async function test() {
      await myOtherFunction() //working
    }
    

    You can also make anonymous callback functions async:

    myMethod().then(async () => {
      await myAsyncCall()
    })
    
    0 讨论(0)
  • 2021-01-18 08:43

    You don't read that error message right: the problem isn't the function you're calling but the function you're in.

    You may do

    (async function(){
        await dbc.solve(img);
        // more code here or the await is useless
    })();
    

    Note that this trick should soon enough not be needed anymore in node's REPL: https://github.com/nodejs/node/issues/13209

    0 讨论(0)
提交回复
热议问题