Promise Catch 在 json rpc 调用中未收到错误

Posted

技术标签:

【中文标题】Promise Catch 在 json rpc 调用中未收到错误【英文标题】:Promise Catch is not receiving error in json rpc calls 【发布时间】:2020-03-10 08:49:51 【问题描述】:

如果地址错误或交易不成功但没有得到任何响应,我会尝试出错。请帮帮我

/列出交易 API/

app.post('/sendtoadd',(req,res) => 

        var fromAdd = req.body.fromAddress;
        var toAdd = req.body.toAddress;
        var qty= req.body.qty;
        var assetId = req.body.assetId;
        console.log("SEND TO ADDRESS API is in progress");
        functions.sendToAddress(fromAdd, toAdd, qty, assetId).then(function(result)
            res.send(result);
        ).catch(function(err) 
            console.log(err);
            res.send(err);
        );
)

/*函数定义*/

function sendToAddress(fromAddress, toAddress, qty, assetId)
return new Promise(function(resolve,reject)
            var client = new rpc.Client(options);
            client.call(
                "jsonrpc":"2.0", 
                "id":1, 
                "method":"sendtoaddress", 
                "params":[fromAddress,toAddress,qty,assetId]
                ,
                function (err, res)
                    if(err)
                        reject(err);
                        return;
                     else 
                        var msg = res;
                        var message = msg.result;
                        resolve(message);
                    
                )
        )

【问题讨论】:

如果错误在json响应中,我该如何检查响应消息 你用 [grpc] 标记了这个。您能否说明您正在使用什么 gRPC 库以及如何创建或加载 rpc.Client 类? 【参考方案1】:

client.call 的回调函数是异步的。因此它不会找到 reject() 或 resolve() 回调。

试试:

function sendToAddress(fromAddress, toAddress, qty, assetId)

    return new Promise(function(resolve,reject)
        var res = resolve,
            rej = reject;
        var client = new rpc.Client(options);
        client.call(
            "jsonrpc":"2.0", 
            "id":1, 
            "method":"sendtoaddress", 
            "params":[fromAddress,toAddress,qty,assetId]
        ,
        function (err, res)
            if(err)
                rej(err);
                return;
             else 
                var msg = res;
                var message = msg.result;
                res(message);
            
        )
    );

【讨论】:

以上是关于Promise Catch 在 json rpc 调用中未收到错误的主要内容,如果未能解决你的问题,请参考以下文章

如何重构一个使用相同函数的promise catch,但在调用函数中也是一个变量?

Promise的catch()函数

如果使用 then ,是不是需要在 promise 中嵌套 catch?

Promise中的then第二个参数和catch有什么区别?

在 promise.then 或 promise.catch 中调用时,Array.push 的工作很奇怪

为啥我不能在 Promise.catch 处理程序中抛出?