Promise就是一个给一步操作提供的容器,在这个容器里,有两个阶段无法改变的阶段,第一个阶段就是Pending(进行),第二个阶段就是结果阶段,包含Fulfilled(成功)、Rejected(失败)两个结果。

这两个结果不会改变。然后结果结束后就会用then来执行相应的结果。

  1. new Promise((resolve,reject)=>{
  2. 相应操作
  3. if(异步操作成功){
  4. resolve(value)
  5. }else{
  6. reject(error)
  7. }
  8. }).then(value=>{
  9. // 成功后操作
  10. },error=>{
  11. // 失败后操作
  12. })

用Promise封装jsonp方法

  1. import originJSONP from 'jsonp'
  2. // 这时候Url是不带参数的,我们让data变成参数,data在具体定义获取具体内容的时候再单独配置
  3. export default function jsonp(url, data, option) {
  4. // 看url是否有问号的意思就是只在第一次加参数的时候加一个问号,剩下就是加&
  5. url += (url.indexOf('?') < 0 ? '?' : '&') + param(data)
  6. return new Promise((resolve, reject) => {
  7. originJSONP(url, option, (err, data) => {
  8. if (!err) {
  9. resolve(data)
  10. } else {
  11. reject(err)
  12. }
  13. })
  14. })
  15. }
  16. // 将data数据遍历,前提data是一个数组
  17. function param(data) {
  18. let url = ''
  19. for (var k in data) {
  20. let value = data[k] !== undefined ? data[k] : ''
  21. url += `&${k} = ${encodeURIComponent(value)}`
  22. }
  23. //删除第一个&符号
  24. return url ? url.substring(1) : ''
  25. }

定义一个重复比较多的配置文件config.js

  1. export const commonParams = {
  2. g_tk: 5381,
  3. inCharset: 'utf-8',
  4. outCharset: 'utf-8',
  5. notice: 0,
  6. format: 'jsonp'
  7. }
  8. // jsonp默认的options就是jsonpCallback
  9. export const options = {
  10. param: 'jsonpCallback'
  11. }
  12. export const ERR_OK = 0

然后再进行获取页面方法的封装

  1. import jsonp from 'common/js/jsonp'
  2. import { commonParams, options } from './config'
  3. export function getRecommend() {
  4. // 获取qq音乐的地址
  5. const url =
  6. 'https://c.y.qq.com/musichall/fcgi-bin/fcg_yqqhomepagerecommend.fcg'
  7. // object.assign()方法来合并commonParams对象和后面的对象
  8. const data = Object.assign({}, commonParams, {
  9. platform: 'h5',
  10. uin: 0,
  11. needNewCode: 1
  12. })
  13. // 最后返回的是
  14. return jsonp(url, data, options)
  15. }

再相应组件中进行调用

  1. <script>
  2. import { getRecommend } from 'api/recommend'
  3. import { ERR_OK } from 'api/config'
  4. export default {
  5. created() {
  6. this._getRecommend()
  7. },
  8. methods: {
  9. _getRecommend() {
  10. getRecommend().then(res => {
  11. if (res.code === ERR_OK) {
  12. console.log(res.data.slider)
  13. }
  14. })
  15. }
  16. }
  17. }
  18. </script>

然后就可以在控制台获得数据了

vue中利用Promise封装jsonp并调取数据的更多相关文章

  1. 聊聊 Vue 中 axios 的封装

    聊聊 Vue 中 axios 的封装 axios 是 Vue 官方推荐的一个 HTTP 库,用 axios 官方简介来介绍它,就是: Axios 是一个基于 promise 的 HTTP 库,可以用在 ...

  2. Vue中axios的封装和api接口的统一管理

    更新的是我csdn上的文章,需要的话可以看下,互相学习点击去我的csdn vue中axios的封装 在vue项目和后端交互获取数据时,通常使用axios库,官方文档:https://www.npmjs ...

  3. Vue中利用$emit实现子组件向父组件通信

    Vue中利用$emit实现子组件向父组件通信 父组件 <template> <div> <p>我是父组件</p> <child :isShow=& ...

  4. 【转】asp.net中利用session对象传递、共享数据[session用法]

    来自:http://blog.unvs.cn/archives/session-transfer-method.html 下面介绍Asp.net中利用session对象传递.共享数据用法: 1.传递值 ...

  5. asp.net中利用session对象传递、共享数据[session用法]

    下面介绍Asp.net中利用session对象传递.共享数据用法: 1.传递值: 首先定义将一个文本值或单独一个值赋予session,如下: session[“name”]=textbox1.text ...

  6. vue中Axios的封装和API接口的管理

    前端小白的声明: 这篇文章为转载:主要是为了方便自己查阅学习.如果对原博主造成侵犯,我会立即删除. 转载地址:点击查看 如图,面对一团糟代码的你~~~真的想说,What F~U~C~K!!! 回归正题 ...

  7. vue中axios的封装以及简单使用

    一.axios的封装 在vue中为了使用axios使用方便,不需要每一个模块进行导入,就需要对其进行封装: 1.新建http.js模块 import axios from 'axios' // 设置基 ...

  8. vue中利用.env文件存储全局环境变量,以及配置vue启动和打包命令

    目录 1,前言 2,.env文件的作用 3,配置.env文件 4,配置启动命令 5,获取.env中的全局变量 5,实际用处 1,前言 分享一下vue项目中利用.env文件存储全局环境变量,以及利于项目 ...

  9. Vue中如何使用axios请求跨域数据

    1.axios不支持jsonp,因为axios的作者觉得jsonp不太友好,推荐用CORS方式更为干净: 2.在使用axios发送请求时,服务器端设置 res.header("Access- ...

随机推荐

  1. SQL学习_WHERE 数据过滤

    1.比较运算符 SQL:SELECT name, hp_max FROM heros WHERE hp_max > 6000 SQL:SELECT name, hp_max FROM heros ...

  2. Ubantu搭建虚拟环境

    配置虚拟环境 Ubantu16.0.4 1.安装python虚拟环境 sudo apt-get install virtualenv 2.vrtaulenvwrapper是virtualenv的扩展包 ...

  3. ISODATA聚类算法的matlab程序

    ISODATA聚类算法的matlab程序 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 参考:Kmeans及ISODATA算法的matlab实现 算法 ...

  4. Vue生命周期钩子---3

    vue生命周期流程图:4张图 : 生命周期的解析和应用: Vue 实例有一个完整的生命周期,也就是从开始创建.初始化数据.编译模板.挂载Dom→渲染.更新→渲染.卸载等一系列过程,我们称这是 Vue ...

  5. Html学习之十六(表格与表单学习--课程表制作)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. 【西北师大-2108Java】第三次作业成绩汇总

    [西北师大-2108Java]第三次作业成绩汇总 熟悉PTA平台线上测试环境: 理解用户自定义类的定义: 掌握对象的声明: 学会使用构造函数初始化对象: 使用类属性与方法的使用掌握使用: 掌握pack ...

  7. python3.5.3rc1学习十:网络请求

    #sys模块import sys sys.stderr.write('This is stderr text\n')# 因为从定向有缓冲区,所以需要以下这行代码sys.stderr.flush()sy ...

  8. keras 学习笔记(二) ——— data_generator

    data_generator 每次输出一个batch,基于keras.utils.Sequence Base object for fitting to a sequence of data, suc ...

  9. mysqltest语法整理

    1. mysqltest是mysql自带的测试引擎, 它实现了一种小语言,用来描述测试过程,并将测试结果与预期对比. 小语言按照语法大致分为三类:mysql command,sql,comment.s ...

  10. 端口转发之 nc

    nc使用方法: Ncat 7.50 ( https://nmap.org/ncat ) Usage: ncat [options] [hostname] [port] Options taking a ...