gpt4 book ai didi

javascript - 如何在nodejs中实现bluebird promise

转载 作者:搜寻专家 更新时间:2023-11-01 00:00:36 25 4
gpt4 key购买 nike

我尝试了 node bluebird promise,我无法在 then 函数中使用 resolve & reject。下面是我调用 promise 的代码

  modules.modelClip.exGetAllClips(sUserData)
.then(function(finalResult) {
console.log("Final result " + finalResult)
})
.error(function(e) {
console.log("Error handler " + e)
})
.catch(function(e) {
console.log("Catch handler " + e)
});

并且在 exGetAllClips 函数中返回 promise 。

exports.exGetAllClips = function(pUserData) {
console.log("--- inside : clipModel : exGetAllClips -----------------------------------------------------");
console.log(pUserData);

return new modules.promise(function(resolve, reject) {
modules.dbConnection.getConnection(function(rErrorCon, connection) {
if (rErrorCon) {
reject(rErrorCon);
} else {
resolve(connection);
}
});
}).then(function(connection) {
console.log('Result 4 ')
var sClipQuery = "CALL spGetAllClips(?)";
var query = connection.query(sClipQuery, [pUserData.selfId
]);
query.on('error', function(err) {
// Handle error, an 'end' event will be emitted after this as well
//return err;
console.log(" error : spGetAllClips : ",err);
reject(err);
}).on('result', function(row) {
console.log("row : ", JSON.stringify(row));
resolve( row);
}).on('end', function() {
// all rows have been received
connection.release();
})

});
};

如果存在,我想从 .then 中抛出错误。但是无法执行此操作,它会抛出错误 reject is undefined

请帮助,如何实现这个或任何其他方式。

最佳答案

我希望这样,首先有两个回调(一个实际上是一个事件处理程序,我不太习惯使用 Promises 来处理它),所以将它们分成两个 promise :

  • 通过 promise 整个模块,使用 getConnectionAsync 而不是 getConnection

  • 关注bluebird docs用于处理一次性事件(请注意,我没有维护一个标志来检查 promise 是否已经解决),代码可能是这样的:

     modules.dbConnection = modules.promise.promisifyAll(modules.dbConnection);
    ...

    exports.exGetAllClips = function(pUserData) {
    console.log("--- inside : clipModel : exGetAllClips -----------------------------------------------------");
    console.log(pUserData);

    return modules.dbConnection.getConnectionAsync()
    .then(function(connection) {
    console.log('Result 4 ')
    var sClipQuery = "CALL spGetAllClips(?)";
    return new modules.promise(function(resolve, reject){
    var query = connection.query(sClipQuery, [pUserData.selfId]);
    query.on('error', function(err) {
    // Handle error, an 'end' event will be emitted after this as well
    //return err;
    console.log(" error : spGetAllClips : ",err);
    reject(err);
    }).on('result', function(row) {
    console.log("row : ", JSON.stringify(row));
    resolve( row);
    }).on('end', function() {
    // all rows have been received
    connection.release();
    });
    });
    };

关于javascript - 如何在nodejs中实现bluebird promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35332333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com