簡體   English   中英

使用Promise.reject和javascript的正確方法是什么

[英]What is the proper way to use Promise.reject with javascript

我有以下這段代碼

new Promise((resolve, reject) => { 
    resolve(apiRequest(data))
    reject(console.log('Error'))
}).then(response)

兩種方法(解析和拒絕)都被觸發,但是我只想在出現問題時才調用拒絕。 如果在這種情況下出現問題,如何拋出錯誤?

我檢查了一下,但似乎無法使用If語句進行檢查。

new Promise((resolve, reject) => {
    const printResult = apiRequest(data)
    console.log(printResult) //Outputs Promise {<pending>}
    resolve(printResult) //Then it works
    reject(console.log('Error'))
}).then(response)

拒絕諾言的正確方法是什么?

最簡單的方法是使用if條件。

new Promise((resolve, reject) => {
   // do something...
   if(somethingGoodHappened) {
      resolve(data)
   } else {
      reject(error)
   }
})

但是通常在處理異步請求時,您正在調用的東西通常會返回一個Promise,因此您可以附加then並在那里catch回調。

apiRequest(data)
.then((result) => {
   // all good
})
.catch((err) => {
   console.log(err)
})

 const mock_api = () => new Promise((res, rej) => { const number = Math.floor((Math.random() * 100) + 1); setTimeout(() => { if (number%2==0) return res('randomly RESOLVED') return rej('randomly REJECTED') }, 2000) }) const async_promise = () => new Promise(async (resolve, reject) => { try { const resolvedPromise = await mock_api() resolve(resolvedPromise) } catch (e) { reject(e) } }) const classicPromise = () => new Promise((resolve, reject) => { mock_api() .then(resolve) .catch(reject) }) const makeAsyncRequest = async () => { try { const data = await async_promise() console.log('ASYNC AWAIT RESOLVE', data) } catch (e) { console.log('ASYNC AWAIT ERR', e) } } makeAsyncRequest() classicPromise() .then(r => console.log('PROMISE CHAIN RESOLVE', r)) .catch(e => console.log('PROMISE CHAIN ERR', e)) 

因為您在拒絕之前就解決了問題,所以它不會遇到拒絕,

您可以使用:

if (printResult) {
  resolve(printResult)
} else {
  reject(console.log('Error'))
}

您可以捕獲異常並將其作為已拒絕的承諾返回

function asyncFunc() {
try {
    doSomethingSync();
    return doSomethingAsync()
    .then(result => {
        ···
    });
} catch (err) {
    return Promise.reject(err);
}

}

始終檢查err是否有任何錯誤返回承諾(以下示例)

    // Return new promise 
return new Promise(function(resolve, reject) {
    // Do async job
    request.get(options, function(err, resp, body) {
        if (err) {
            reject(err);
        } else {
            resolve(JSON.parse(body));
        }
    })
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM