首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >关于节点回调函数的功能和如何访问

关于节点回调函数的功能和如何访问
EN

Stack Overflow用户
提问于 2022-07-31 10:58:14
回答 1查看 100关注 0票数 0

我有一个API的初学者代码,它允许我搜索一个术语,比如Apple,并将JSON对象的列表打印到控制台。

代码语言:javascript
运行
AI代码解释
复制
var params = {
  q: "Apple",
  tbm: "isch",
  ijn: "0"
};
                  
var callback = function(data) {
  console.log(data["images_results"]);
};
                
src.json(params, callback);

我希望将数据“images_results”项保存到变量中,而不是打印到控制台。到目前为止,我已经尝试在回调函数中将var设置为数据“images_results”(不过,var是在函数之外初始化的),在另一种情况下,我将其设置为src.json(params,回调)。但是当我试图访问变量时,它显示为未定义的。如何使用这个API访问数据“images_results”而不是将结果打印到控制台?

代码语言:javascript
运行
AI代码解释
复制
var a;

var params = {
  q: "Apple",
  tbm: "isch",
  ijn: "0"
};
                  
var callback = function(data) {
  a = data["images_results"];
};
                
src.json(params, callback);

console.log(a);

更新的

代码语言:javascript
运行
AI代码解释
复制
const params = {
            engine: "google",
            google_domain: "google.com",
            hl: "en",
            gl: "us",
            device: "desktop",
            tbm: "isch",
        };

        const getJson = async () => {
            return new Promise((resolve) => {
              src.json(params, resolve);
            });
        };

        const getFirstImages = async () => {
            const imres = [];
            for (item in items) {
              params.q = item['sku'];
              const json = await getJson();
              imres.push(json.images_results[0]["original"]);
            }
            return imres;
          };

          getFirstImages().then(imres => {
            console.log(imres);
            images = imres;
            myCache.set('total_images', images);
        })
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-01 01:00:22

您无法以这种方式保存SerpApi的结果,因为.json方法是异步的,并且在控制台中打印a之后运行callback函数。您只需要在某些函数中处理结果,因为不能在全局范围内使用类似于await的东西。如果你能更多地告诉我你下一步想做些什么,我可以帮你更好。但现在你可以做这样的事:

代码语言:javascript
运行
AI代码解释
复制
var params = {
  q: "Apple",
  tbm: "isch",
  ijn: "0"
};
                  
var callback = function(data) {
  var a = data["images_results"];
  
  // do what you want to do next in this function
};
                
src.json(params, callback);

或者您可以使用.then链接:

代码语言:javascript
运行
AI代码解释
复制
const params = {
  q: "Apple",
  tbm: "isch",
  ijn: "0"
};

const getJson = () => {
  return new Promise((resolve) => {
    src.json(params, resolve);
  });
};

getJson().then(({images_results}) => {
  var a = images_results
  // do what you want to do next in this function
});

更新:

如果我理解得对,您需要做(签入在线IDE)这样的事情:

代码语言:javascript
运行
AI代码解释
复制
const SerpApi = require("google-search-results-nodejs");
const src = new SerpApi.GoogleSearch(process.env.API_KEY); //your api key from serpapi.com

const params = {
  engine: "google",
  google_domain: "google.com",
  hl: "en",
  gl: "us",
  device: "desktop",
  tbm: "isch",
};

const searchQueries = ["apple", "cherry", "banana"];

const getJson = async () => {
  return new Promise((resolve) => {
    src.json(params, resolve);
  });
};

const getFirstImages = async () => {
  const images = [];
  for (query in searchQueries) {
    params.q = query;
    const json = await getJson();
    images.push(json.images_results[0]);
  }
  return images;
};

getFirstImages().then(images => {
    console.log(images)
    // or do what you want to do next
})

请注意,我们在异步函数getFirstImages中用图像填充数组,等待(await)接收带有结果的对象(json)。另外,您不能使用数组方法(例如forEach)在searchQueries上迭代,因为await不能工作。

输出:

代码语言:javascript
运行
AI代码解释
复制
[
   {
      "position":1,
      "thumbnail":"https://serpapi.com/searches/62e7affb9bddf73501bfde87/images/d6db51527c0e83ba92158999bf4cd1063f03d4fcbdfbcca0bb5f77b191b27a53.png",
      "source":"en.wiktionary.org",
      "title":"0 - Wiktionary",
      "link":"https://en.wiktionary.org/wiki/0",
      "original":"https://upload.wikimedia.org/wikipedia/commons/thumb/6/6e/Z%C3%A9ro.svg/1200px-Z%C3%A9ro.svg.png",
      "is_product":false
   },
   {
      "position":1,
      "thumbnail":"https://serpapi.com/searches/62e7affed737d7249d50f729/images/920c4e458460303dc0bb77ec3f448f9ad3946e5412eb72ca3cbb8751a8cee7c6.png",
      "source":"en.wiktionary.org",
      "title":"1 - Wiktionary",
      "link":"https://en.wiktionary.org/wiki/1",
      "original":"https://upload.wikimedia.org/wikipedia/commons/thumb/0/08/Un1.svg/1200px-Un1.svg.png",
      "is_product":false
   },
   {
      "position":1,
      "thumbnail":"https://serpapi.com/searches/62e7b0064055aa23fb85ce10/images/4036a5ed1a2cf55b31ca73fd5c660dc71431f02052cf7ee6f4796043060b475c.png",
      "source":"en.wiktionary.org",
      "title":"2 - Wiktionary",
      "link":"https://en.wiktionary.org/wiki/2",
      "original":"https://upload.wikimedia.org/wikipedia/commons/thumb/3/3b/Deux.svg/1200px-Deux.svg.png",
      "is_product":false
   }
]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73186142

复制
相关文章
Cypress web自动化21-如何在多个tests之间共享cookies
Cypress 默认每个用例开始之前会清空所有的cookies,保证每个用例的独立性和干净的环境。 但是我们希望在一个js文件下写多个测试用例的时候,希望只调用一次登录, 记住cookies,后面的用例都默认是登录状态,这样测试的效率高一些。 实现cookies共享有2种实现方式
上海-悠悠
2020/05/29
1.9K0
多个Pod之间共享Volume以及详细配置
要在多个Pod之间共享Volume,可以使用Kubernetes的persistentVolumeClaim(PVC)来声明和访问共享的Volume。
一凡sir
2023/09/02
1.4K0
多个Pod之间共享Volume以及详细配置
如何优雅地解决多个 React、Vue 应用之间的状态共享
前言 人生是个积累的过程,你总会有摔倒,即使跌倒了,你也要懂得抓一把沙子在手里。—— 丁磊 码过的每一个需求、踩过的每一个坑、修过的每一个 bug 、学过的每一个知识以及看过的每一篇文章都不会成为无
前端劝退师
2020/12/15
2.1K0
如何优雅地解决多个 React、Vue  应用之间的状态共享
如何在微服务之间共享和同步代码
微服务架构非常适合构建可扩展的代码库,具有更少的耦合,更好的关注点分离,更高的弹性,结合不同的技术,最重要的是,更好的模块化和构建它的组件的可重用性。
February
2018/11/23
2.7K0
如何在WordPress网站之间共享用户和登录
wordpress为网站系统提供了相同的数据表结构,为快速实现多个WordPress网站之间共享用户数据提供了可能。wordpress如何实现如网易通行证等大站一样的共享用户登录呢?只需要将需要共享的数据库共用即可,我们这里只需要共享_user与_usermeta表,下面是完整实现过程。
许都博客
2021/06/15
1.9K0
Vue组件之间的数据共享
组件之间的数据共享 在项目开发中,组件之间的最常见的关系分为如下两种: 父子关系 兄弟关系 父子组件之间的数据共享 父子组件之间的数据共享又分为: 父 -> 子共享数据 子 -> 父共享数据 1. 父组件向子组件共享数据 父组件向子组件共享数据需要使用自定义属性。示例代码如下: 2. 子组件向父组件共享数据 子组件向父组件共享数据使用自定义事件。示例代码如下: 3. 兄弟组件之间的数据共享 在 vue2.x 中,兄弟组件之间数据共享的方案是 EventBus。 EventBus 的使用步骤 创建
777nx
2023/05/02
8010
Vue组件之间的数据共享
如何在多个应用程序中共享日志配置
有的时候你有多个应用程序,它们需要使用相同的日志配置。在这种情况下,你可以将日志配置放在一个共享的位置,然后通过项目文件快速引用。方便快捷,不用重复配置。
newbe36524
2023/08/23
2650
多个git账号之间的切换
做过很多遍了,却总是记不住,这回从头来描述一下。 介绍 所谓多个git账号,可能有两种情况: 我有多个github的账号,不同的账号对应不同的repo,需要push的时候自动区分账号 我有多个git的账号,有的是github的,有的是bitbucket的,有的是单位的gitlab的,不同账号对应不同的repo,需要push的时候自动区分账号 这两种情况的处理方法是一样的,分下面几步走: 处理 先假设我有两个账号,一个是github上的,一个是公司gitlab上面的。先为不同的账号生成不同的ssh-key
happy123.me
2018/06/04
2K0
面试官:sessionStorage可以在多个Tab之间共享数据吗?
英文 | https://fatfish.medium.com/interviewer-can-sessionstorage-share-data-between-multiple-tabs-c30983c61501
五月君
2023/09/06
4880
面试官:sessionStorage可以在多个Tab之间共享数据吗?
多个线程之间的通信问题
在同步代码块中,锁对象是谁,就用那个对象来调用wait和notify 为什么wait方法和notify方法需要定义在Object?       因为所有的对象都是Object的子类对象,而所欲的对象都可以当做锁对象
砖业洋__
2023/05/06
4320
多个线程之间的通信问题
共享主机和 WordPress 主机之间的区别
共享主机:顾名思义,共享主机基本上是一种网络托管,服务提供商提供来自多个网站的网页,并允许这些网站共享连接到互联网的物理服务器。它将网站内容存储在服务器上,并在需要时提供给访问者。
海拥
2022/12/11
5.9K0
在 request 之间共享 SecurityContext
既然 SecurityContext 是存放在 ThreadLocal 中的,而且在每次权限鉴定的时候都是从 ThreadLocal 中获取 SecurityContext 中对应的 Authentication 所拥有的权限,并且不同的 request 是不同的线程,为什么每次都可以从 ThreadLocal 中获取到当前用户对应的 SecurityContext 呢?
johnhuster的分享
2022/03/28
7080
时代智能利器:Zapier —— 简化工作,提高效率!
在当今数字时代,人们面临着越来越多的数字化需求,如何高效连接应用程序和优化工作流程成为一大挑战。Zapier 作为一款强大的在线自动化工具,为用户提供了简单而高效的解决方案。无需编写代码,Zapier可以帮助你轻松连接各种应用程序,并实现自动化工作流程。
程序那些事儿
2023/08/10
8.5K0
时代智能利器:Zapier —— 简化工作,提高效率!
每个前端开发者都应知道的14个实用网站
在本文中,我将分享一些非常有用的网站合集,这些网站可以在你的日常工作中极大地帮助你。这些网站已经成为我各种任务的首选资源,节省了我的时间,提高了工作效率
前端小智@大迁世界
2023/08/16
1.2K0
每个前端开发者都应知道的14个实用网站
每个前端开发者都应知道的10个实用网站
Documatic 是一个高效的搜索引擎工具,旨在帮助开发人员轻松搜索他们的代码库,找到特定的代码片段、函数、方法和其他相关信息。该工具旨在通过在几秒钟内快速提供准确和相关的搜索结果,节省开发人员宝贵的时间,提高他们的生产力。
前端小智@大迁世界
2023/08/16
4480
每个前端开发者都应知道的10个实用网站
【JavaSE专栏78】线程同步,控制多个线程之间的访问顺序和共享资源的安全性
本文讲解了 Java 中线程同步的语法和应用场景,并给出了样例代码。线程同步是一种机制,用于控制多个线程之间的访问顺序和共享资源的安全性。当多个线程并发地访问共享资源时,如果没有适当的同步机制,可能会导致数据不一致或出现竞态条件等问题。
Designer 小郑
2023/08/17
2830
【JavaSE专栏78】线程同步,控制多个线程之间的访问顺序和共享资源的安全性
SFTPServer如何共享多个目录
在使用知行之桥EDI系统的时候,有些客户作为SFTPServer端进行SFTP连接的时候,希望能够将文件按照不同的业务类型进行区分,并将区分好的文件放入不同的文件夹中,然后将这些文件夹共享给合作伙伴。
知行软件EDI
2023/02/03
1.1K0
基于CPU和RabbitMQ进行自动伸缩
最终用户客座文章作者:Ratnadeep Debnath,Zapier 网站可靠性工程师
CNCF
2022/03/27
1.3K0
基于CPU和RabbitMQ进行自动伸缩
【转载】如何在CentOS 7服务器之间使用NFS共享目录
NFS 即 (Network File System) 的缩写,最大的功能就是可以通过网络,让不同的机器、不同的操作系统实现共享彼此的文件。
兜兜转转
2023/03/08
2.3K0
如何在博客的日志之间显示广告
这篇文章将向你展示如何在 WordPress 主页上的日志之间放置 AdSense 代码(或者其他广告的代码)。同样的方法也可以用于在存档页面(包括分类和作者存档页面)放置广告。
Denis
2023/04/13
5740

相似问题

带番石榴EventBus的条件订阅

20

Eventbus事件订阅者

27

与番石榴eventBus订阅者一起使用Spring事务处理

12

芭乐eventbus有订阅者吗?

10

Vertx : eventBus订阅者被取消订阅的原因

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文