我使用異步瀑布來處理請求中的嵌套條件,并使用快速框架。但是我很困惑如何在資料為<promise>. 此承諾資料是來自 sequalize 的查詢。
這是草圖
exports.getanythinghere = async function() {
var query = "SELECT anything, here "
"FROM anywhere WHERE ignore this query";
return new Promise((resolve, reject) => {
db.sequelize.query(query , {
type: QueryTypes.SELECT
}).then(wth => {
resolve(wth);
})
});
}
async.waterfall([
function(callback) {
const trying = getanythinghere ();
callback(null, trying);
},
function(dataone, callbackt) {
console.log("dataone is ", dataone);
}
], function(err, res) {
if (err) return callback(err);
callback(null, res);
});//waterfall
有dataone總是dataone is Promise { <pending> }
我在這里缺少什么。在jquery,我會做getanythinghere().done(function(){});
但我想在瀑布的這個回呼中擁有它。
幾年前我曾經這樣做過,但因為java和php太多我忘記了
任何幫助請..
uj5u.com熱心網友回復:
你不再需要像 Async 這樣的庫,主要是因為 Javascript 現在原生支持 async/await。
首先,這是一個 Promise,因為你可以添加它.then():
db.sequelize.query(query , {type: QueryTypes.SELECT});
由于它是一個 Promise,您不需要(也不應該)將它包裝在另一個 Promise 中,并且您也可以簡單地等待它,而不是使用 .then()
const trying = await db.sequelize.query(query , {type: QueryTypes.SELECT});
使用await或.then()解決承諾,你會得到一個值,而不是Promise { <pending> }.
然后,您可以直接使用trying,您不需要將其傳遞給其他函式,例如瀑布。
console.log("trying is ", trying);
最后,您的所有代碼都包含在四行中:
try{
const query = `SELECT anything, here FROM anywhere WHERE ignore this query`;
const trying = await db.sequelize.query(query , {type: QueryTypes.SELECT});
console.log("trying is ", trying);
} catch(err) {
console.log(err);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/371260.html
標籤:javascript 节点.js 异步等待 瀑布
