【问题标题】:how are errors handled differently between the following code samples以下代码示例之间的错误处理方式有何不同
【发布时间】:2021-08-24 17:39:25
【问题描述】:

我试图了解 promises 和 async await 是如何工作的。我有三个实现,想知道它们是否等效,或者发生的事情是否存在重大差异:

原始实现:

function sendData(url,emailPass){

    let bodyFormData = new FormData()
    for (const [key, value] of Object.entries(emailPass)) {
        console.log(key,value)
        bodyFormData.append(key,value)
    }    
        
    axios({
        method: 'POST',
        url: url,
        data: bodyFormData,
        headers: {'Content-Type': 'multipart/form-data'}
    })
        .then(function (response){
            console.log(response.data)
            // do stuff with the data   
        })
        .catch(function(response){
            console.log(response)
            // do stuff with the error
        })    
}

第二次实施:

async function sendData2(url,emailPass){

    let bodyFormData = new FormData()
    for (const [key, value] of Object.entries(emailPass)) {
        //console.log(key,value)
        bodyFormData.append(key,value)
    }

    try{
        const response = await axios({
            method: 'POST',
            url: url,
            data: bodyFormData,
            headers: {'Content-Type': 'multipart/form-data'}
            })
                return response.data
    }catch(e){
        const error =['FATAL ERROR: See Admin', e]
        return error
    }
}

第三个实现:

function sendData3(url,emailPass){

    let bodyFormData = new FormData()
    for (const [key, value] of Object.entries(emailPass)) {
        //console.log(key,value)
        bodyFormData.append(key,value)
    }

    return axios({
            method: 'POST',
            url: url,
            data: bodyFormData,
            headers: {'Content-Type': 'multipart/form-data'}
            })
                .then(function(response){
                    return response.data
                })
                .catch(function(response){
                    return response
                })
}

【问题讨论】:

  • sendData()的第一个样本没有return,所以它总是返回`undefined。
  • 我更新了问题,我在原来的实现中犯了一个错误。确实在原始文件中没有返回,但我们只是将代码移动到使用数据执行的操作中。

标签: javascript async-await promise axios


【解决方案1】:

通过暂停执行直到返回的承诺被履行或拒绝,使承诺返回同步。 Promise 的解析值被视为 await 表达式的返回值。使用 async 和 await 可以在异步代码周围使用普通的 try/catch 块。

async try await await await await catch

当 Promise 可以通过 then() 或链式解决时。

then(). then(). then(). then(). catch( error for all )

【讨论】:

  • 这与第三个实现有何不同?
  • 如果你用一个进程和一个 then () 的分辨率向服务器发出请求,这一切都取决于实现。 cash() 足以不使用不必要的代码加载线程。但是如果他们同时发出两个以上的请求,其中一个或多个失败并且执行线程必须继续解决承诺,它需要一个 try/catch 并且一切都与各种等待异步,利用资源。
  • return 不是必需的。我测试了一些请求,一个有一个没有。
  • await 不会暂停执行。
猜你喜欢
  • 1970-01-01
  • 2021-07-18
  • 2013-07-08
  • 1970-01-01
  • 2020-03-11
  • 2021-06-23
  • 2010-09-18
  • 2021-07-20
  • 2017-07-22
相关资源
最近更新 更多