Javascript可以完善未来吗?

时间:2016-06-24 13:51:36

标签: javascript promise future

我正在查看PromiseJSES6的类似于CompletableFuture的内容,但找不到任何内容。

有关如何在javascript中实现此功能的任何建议?感谢

注意://Thanks a bunch. ```{r,echo=TRUE,message=F, warning=F} library(readr) library(randomForest) set.seed(415) ``` Reading the CSV files to be analyzed ```{r,echo=TRUE,message=F, warning=F} train <- read_csv("train.csv") test <- read_csv("test.csv") store <- read_csv("store.csv") ##merging the two files because two files have the different feature that have to be combined in order to the see the full effect of features on sales. train1 <- merge(train,store) test1 <- merge(test,store) ``` Converting all the 'NA' in train data to Zeros. Store 622 has 11 missing values for the "open" column, in test data; so to predict correctly I have decided to input "1" for open column of store 622. Otherwise our prediction will not be correct. ```{r} train1[is.na(train1)] <- 0 test1[is.na(test1)] <- 1 ## We will only look at the stores that had status as "open" train1<- train1[ which(train1$Open=='1'),] ``` train1 and test1 data have "Date" as column value. We will seperate the Date into month, year and day respectively. These new variables generated through "Date" column will be better handle to predict the sales ```{r} train1$Date <- as.Date(train1$Date) test1$Date <- as.Date(test1$Date) train1$month <- as.integer(format(train1$Date, "%m")) train1$year <- as.integer(format(train1$Date, "%y")) train1$day <- as.integer(format(train1$Date, "%d")) train1$DayOfYear <- as.integer(as.POSIXlt(train1$Date)$yday) train1$week <- as.integer( format(train1$Date+3, "%U")) test1$month <- as.integer(format(test1$Date, "%m")) test1$year <- as.integer(format(test1$Date, "%y")) test1$day <- as.integer(format(test1$Date, "%d")) test1$DayOfYear <- as.integer(as.POSIXlt(test1$Date)$yday) test1$week <- as.integer( format(test1$Date+3, "%U")) ``` ```{r} names(train1) summary(train1) names(test1) summary(test1) ``` Features relevant to our analysis; Sales column is left as we are going to predict. ```{r} variable.names <- names(train1)[c(1,2,6,7,8:12,14:23)] for (f in variable.names) { if (class(train1[[f]])=="character") { levels <- unique(c(train1[[f]], test1[[f]])) train1[[f]] <- as.integer(factor(train1[[f]], levels=levels)) test1[[f]] <- as.integer(factor(test1[[f]], levels=levels)) } } ``` // Random forest ```{r} result <- randomForest(train1[,variable.names], log(train1$Sales+1), mtry=5, ntree=50, max_depth = 30, sampsize=150000, do.trace=TRUE) importance(result, type = 1) importance(result, type = 2) varImpPlot(result) pred <- exp(predict(result, test1)) -1 submission <- data.frame(Id=test$Id, Sales=pred) write_csv(submission, "resultfile.csv") ``` 不适用,除非您可以先创建Promise.resolve()对象并稍后再完成。

3 个答案:

答案 0 :(得分:1)

  

注意:Promise.resolve()不适合,除非你可以创建   首先承诺对象,然后再完成它。

您可以使用Promise构造函数,在onFulfilled函数范围之外传递onRejectedexecutor个参数

var complete, err, now = new Date().getTime();

var promise = new Promise((onFulfilled, onRejected) => {
  complete = onFulfilled; err = onRejected;
});

promise.then((data) => {
  console.log(data)
});

setTimeout(() => {
  complete("promise resolved " 
           + (new Date().getTime() - now) 
           + " in the future")
}, Math.random() * 3500)

答案 1 :(得分:0)

JavaScript for good reason中没有类似延迟的API。您没有使用CompletableFuture方法的.complete,而只需使用new Promise constructor。您已经链接了包含示例的some documentation,因此我不打算在此处重复这些示例。

答案 2 :(得分:0)

只需满足相同的需求,这就是我在TypeScript中做到的方式

class AddViewsToRestaurantsMenusDishes < ActiveRecord::Migration[6.0]
   def change
     add_column Restaurant, :views, :integer, :default => 0
     add_column Menu, :views, :integer, :default => 0
     add_column Dish, :views, :integer, :default => 0
   end
end

喜欢这样

export function createLazyPromise<T = any>(): Promise<T> & { reject: () => void, resolve: (v: T) => void } {
  let onResolve, onReject;
  const promise = new Promise<T>(((resolve, reject) => {
    onResolve = resolve;
    onReject = reject
  }));
  promise['resolve'] = onResolve;
  promise['reject'] = onReject;
  return promise as any
}