为什么我需要解决诺言中的回应

时间:2019-02-27 07:03:25

标签: javascript vue.js promise axios

我的承诺如下:

let promise = new Promise((resolve, reject) => {
  axios.post("https://httpbin.org/post", params, header)
    .then(response => {
      resolve(Object.assign({}, response.data));
      // resolve("aaaa");
      console.log(response);
    })
    .catch(error => reject(error))
});

为什么我需要用响应数据来解决这个承诺?

如果我将resolve(Object.assign({}, response.data));的行替换为resolve("aaaa");会怎样?

有人可以帮助我吗?谢谢。

4 个答案:

答案 0 :(得分:1)

值得一提的是axios.post()已经返回了Promise,因此您无需将其包装在另一个Promise中。

这将代替:

let promise = axios.post("https://httpbin.org/post", params, header)
  .then(response => {
    console.log(response);
    return Object.assign({}, response.data);
  });

// Later on...
promise.then(data => {
  console.log('Request successful:', data);
}, err => {
  console.log('Request failed:', err);
});

仅当您不束缚现有的诺言时,才需要构造一个新的Promise对象,例如以下示例:

function delay(duration) {
  return new Promise(resolve => setTimeout(resolve, duration));
}

delay(1000).then(() => {
  console.log('this code is delayed by 1s');
});

答案 1 :(得分:0)

resolve()确实按照名称所说:解析了在函数调用中返回值的承诺。

因此,如果您有一个诺言并且要用resolve('aaaaa')解决,这意味着您的诺言将返回成功状态,其值为'aaaaa'。

您也可以拒绝诺言。这意味着您在某个时候打过的电话失败了。与resolve()类似,reject()接受应由promise返回的参数。

答案 2 :(得分:0)

承诺有两个参数resolvereject,用于将响应发送回调用代码。 如果您的诺言完成了代码而没有错误,那么您可以resolve(),通过发回响应(可以是您想要的任何内容)来进行reject(),如果失败,您可以function myFunction(){ return new Promise((resolve, reject) => { try{ /* Do some async calls here */ resolve(result); //Result is what you will find in "then" }catch(e){ reject(e); } }); } myFunction().then((response) => { /* Your logic here*/ }).catch((err) => { console.error(err); } ,通常将错误传递为参数。

resolve函数的参数将在 then 回调中发送回调用函数,而拒绝函数的参数可以在 catch 中找到打回来。

例如

resolve

您可以将return视为异步上下文中的reject,而throwresolve(myVariable)相似,只是一个异常,该异常将被调用代码捕获

因此myVariable将返回resolve('aaa')到调用promise函数的代码,而ALTER TABLE mytable ADD UNIQUE (id,loan_type,term,oldestyear) 将始终将“ aaa”返回到调用代码。

答案 3 :(得分:0)

它所要做的就是使用参数resolve而不是其原始值调用成功回调"aaaa"

假设您传递了回调函数console.log。如果诺言得以解决(即成功),则将使用传递的参数(console.log("aaaa"))调用回调

如果无法解决-如果未成功-则将根据您的reject语句调用.catch()回调。