js promise object

use strict'
// 异步计算,队列化,类比callback
// 都不是单纯的普通方法,都是promise对象才生效,对象可以保存状态,函数只有通过闭包才能保存状态
// 异步操作的常见方法:回调和事件监听
// 异步回调容易层次过深,可读性差,维护性差
// 异步回调剥夺了return的能力
// promise的三个状态:pending初始状态,fulfilled操作成功,rejected操作失败
// .then()返回新的promise实例,由此实现链式调用
// promise可以捕获错误
// 常和定时器一起使用

// new Promise (() => {
//   console.log('支持promise')
// })


// let pro = new Promise(() => {})
// console.log(pro)

let randomPromise = function () {
  let randNum = Math.random() * 2
  console.log(randNum)
  if(randNum < 1) {
    setTimeout(() => {
      console.log('Success Done')
    }, randNum)
  } else {
    console.log('Failed')
  }
}

let log = function (msg) {
  console.log(msg)
}

// function test(resolve, reject) {
//     var timeOut = Math.random() * 2;
//     console.log('set timeout to: ' + timeOut + ' seconds.');
//     setTimeout(function () {
//         if (timeOut < 1) {
//             console.log('call resolve()...');
//             resolve('200 OK');
//         }
//         else {
//             console.log('call reject()...');
//             reject('timeout in ' + timeOut + ' seconds.');
//         }
//     }, timeOut * 1000);
// }

// randomPromise()
// test()
// var p1 = new Promise(test);
// var p2 = p1.then(function (result) {
//     console.log('成功:' + result);
// });
// var p3 = p2.catch(function (reason) {
//     console.log('失败:' + reason);
// });

let emotion = 'ff'
let happyOrNot = function (resolve, reject) {
  if(emotion == 'happy') {
    resolve('I am very happy')
  } else {
    reject('I am very sad')
  }
}


// let promiseTest = new Promise(happyOrNot)
// let promiseThen = promiseTest.then(res => {
//   console.log('成功呢:' + res)
// }).catch(err => {
//   console.log('完蛋了:' + err)
// })

// 0.5秒后返回input*input的计算结果:
// function multiply(input) {
//     return new Promise(function (resolve, reject) {
//         log('calculating ' + input + ' x ' + input + '...');
//         setTimeout(resolve, 500, input * input);
//     });
// }
//
// // 0.5秒后返回input+input的计算结果:
// function add(input) {
//     return new Promise(function (resolve, reject) {
//         log('calculating ' + input + ' + ' + input + '...');
//         setTimeout(resolve, 500, input + input);
//     });
// }
//
// var p = new Promise(function (resolve, reject) {
//     log('start new Promise...');
//     resolve(123);
// });
//
// p.then(multiply)
//  .then(add)
//  .then(multiply)
//  .then(add)
//  .then(function (result) {
//     log('Got value: ' + result);
// });


function first (text) {
  return new Promise((resolve, reject) => {
    let msg = '1 the text is:' + text
    setTimeout(resolve, 500, msg)
  })
}


function second (text) {
  return new Promise((resolve, reject) => {
    let msg = '2 the second text is:' + text
    setTimeout(resolve, 500, msg)
  })
}


function third (text) {
  return new Promise((resolve, reject) => {
    let msg = '3 the third text is:' + text
    setTimeout(resolve, 500, msg)
  })
}


let final = new Promise((resolve, reject) => {
  console.log('start')
  resolve('我在人民广场吃炸鸡')
})


// final.then(first).then(second).then(third).then(res => {
//   console.log('最后的结果是:')
//   console.log(res)
// })

let one = new Promise((resolve, reject) => {
  console.log('one 1')
  setTimeout(resolve, 500, 'one')
})

let two = new Promise((resolve, reject) => {
  console.log('two 2')
  setTimeout(resolve, 500, 'two')
})

Promise.all([one, two]).then(res => {
  // 同时执行好几个方法
  console.log('all')
  console.log(res)
})

Promise.race([one, two]).then(res => {
  // 容错,有一个结束就算完成
  console.log('all')
  console.log(res)
})


// async 返回的是promise对象
// async和await一起用,解决回调套层级问题
function getResult (num) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(2 * num)
    }, 2000)
  })
}


async function gotResult () {
  let result = await getResult(8)
  let result2 = await getResult(3)
  let result3 = await getResult(7)
  let finalResult = result + result2 + result3
  console.log(finalResult)
  return new Promise ((resolve, reject) => {
    setTimeout(() => {
      resolve(result * 2)
    }, 2000)
  })
}

gotResult().then(res => {
  console.log(res)
})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,"【Object Promise】" 是一个错误的输出。根据引用和引用可以看出,这个输出是由axios.get请求返回的promise对象导致的。promise对象代表一个异步操作的最终完成或失败的结果。在Vue中,当我们在控制台打印一个promise对象时,会显示为【Object Promise】。这是因为promise对象本身是一个对象,它并不直接包含具体的数据。 要解决这个问题,可以使用.then()方法来处理promise对象的结果。例如,你可以在.then()方法中使用回调函数来获取返回的数据并进行处理。参考引用中的示例代码,在.then()方法中的回调函数中,你可以使用response.data来访问返回的数据。 另外,根据引用提到的异步问题,axios.get()是一个异步函数。异步函数的特点是会在后台执行,不会阻塞程序的执行。因此,如果你希望以同步的方式获取数据,可以使用async/await语法来处理异步操作。通过在函数前面加上async关键字,然后在axios.get()前面加上await关键字,可以等待请求返回并获取数据。 总结来说,如果你想获取Vue中的数据,并且避免输出【Object Promise】,你可以使用.then()方法或者async/await语法来处理异步操作,以获取并处理返回的数据。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [【vue js】网页显示 [object Promise] 错误](https://blog.csdn.net/qq_36148333/article/details/121724267)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值