2016-02-22 62 views
2

當從函數明確返回new Promise時,我們得到resolvereject函數傳入。我們可以在函數內部的任意點使用這些方法來指示解析或拒絕諾言,包括回調函數內部到內部的其他功能。解決內部回調中的異步函數

考慮:

const doSomeDbWork = function (db) { 
    return new Promise((resolve, reject) => { 
    db.doStuff(result => resolve(result)); 
    }); 
}; 

是否有使用async的相當的不明確返回一個new Promise時,我們也不能等待(就像這個分貝回調的情況下)?

const doSomeDbWork = async function (db) { 
    db.doStuff(result => /* ? */); 
}; 

目前我認爲這是不可能的,而我只需要返回一個新的承諾。我錯過了一招嗎?有沒有辦法做到這一點?

+1

'var result = await promisify(db.doStuff)' – elclanrs

+1

@elclanrs - 可能意思是'var result = await promisify(db.doStuff)()',對不對? – Amit

+0

@不,是的,就是這樣 – elclanrs

回答

1

當沒有明確返回new Promise而使用async時是否存在等價物。

async/await只與承諾(或thenables)的作品,你必須promisify一切自己。在你的情況,很可能是這樣的

async function doSomeDbWork(db) { 
    return new Promise(db.doStuff); 
} 

async function doSomeDbWork(db) { 
    return new Promise(resolve => { db.doStuff(resolve); }); 
} 

(可能與returnawait)。