我是node.js的新手,试图弄清楚异步回调是如何工作的

时间:2019-06-24 16:32:00

标签: javascript node.js

下面给出的代码将输出“ 1”,“ 2”而不是“ 3”

有人可以解释为什么输出中不显示三个的原因吗?

我尝试了许多方法,但仍然无法弄清楚出了什么问题。

library(shiny)
library(plotly)
library(shinyjs)

ui <- fluidPage(
  useShinyjs(),
  actionButton("reset", "Reset"),
  plotlyOutput("plot")
)

server <- function(input, output){
  output[["plot"]] <- renderPlotly({
    df <- data.frame(
      x = c(1,2,1), 
      y = c(1,2,1)
    )
    df %>%
      plot_ly(
        x = ~x,
        y = ~y,
        source = "A",
        type = 'scatter',
        mode = 'markers',
        marker = list(size = 20),
        showlegend = FALSE
      ) 
  })

  observeEvent(input[["reset"]], {
    runjs("Shiny.setInputValue('plotly_selected-A', null);")
  })

  observe({ # just to test
    print(event_data("plotly_selected", source = "A"))
  })

}

shinyApp(ui, server)

2 个答案:

答案 0 :(得分:0)

如xavier所评论,这不应仅编译。您可以尝试的一种方法是:

const IamCallBack = () => { console.log("three");};
function f1(callback) {
console.log("two");
callback();
}

f1(IamCallBack);

答案 1 :(得分:0)

以下是如何使用回调的示例:

const http=require('http');
const fs=require('fs');

function f1(arg_string,callback)
{
      console.log(arg_string);
      callback("three");
}

const server=http.createServer((req,res)=>{
});


server.listen(9800);

console.log("one");
f1("two",function(cb_string){
    console.log(cb_string);
});

这将打印:

one
two
three

首先,给f1的参数提供“两个”,将其打印到控制台。 函数完成后,它将调用callback函数。 我们将回调函数定义为:

function(cb_string){
    console.log(cb_string);
}

在调用f1时将其作为第二个参数提供。然后f1完成运行后,它将调用为其提供的任何函数:

function f1(arg_string,callback)
{
      console.log(arg_string);
      callback("three"); //<--- whatever function you used to call it
}

执行回调函数时,它会输出“三个”,因为这是f1返回给您的原始调用者的信息:

console.log(cb_string);